2

如何在 Android 应用程序崩溃时添加发送反馈选项?这个选项在谷歌自己的应用程序中可以看到,这里是星巴克的一个例子。

应用程序已停止发送反馈的对话框

这个问题有许多非常古老的答案,涉及以编程方式创建类似的东西。他们似乎过度参与制作这个节目。

我很惊讶没有一种简单的方法来实现这一点,而无需在整个应用程序周围进行尝试。这可以简单地启用,例如通过启用 Google Play 商店控制台上的选项或通过在清单中添加一些东西来启用吗?

我无法在 Android 或 Play 商店文档中找到有关如何执行此操作的数据。

更新:我们使用 Crashlytics/Fabric 作为我们的崩溃报告库

此图显示了 Android 6.0 上的默认行为。

在此处输入图像描述

和 8.0:

在此处输入图像描述

4

4 回答 4

1

Android 平台将为您执行此操作。您无需添加任何其他代码。尝试从您的应用程序中抛出异常。你应该看到这个。

https://android-developers.googleblog.com/2010/05/google-feedback-for-android.html

将应用程序发布到 Playstore 后,“发送反馈”选项将可见。我认为您无法看到它,因为您正在测试的应用程序是未直接从 Playstore 下载的应用程序版本,例如:使用调试密钥库签名的应用程序。

于 2017-12-05T13:42:43.847 回答
1

我很惊讶没有一种简单的方法来实现这一点,而无需在整个应用程序中进行尝试

没有办法“在整个应用程序周围进行尝试”。

有很多适用于 Android 的崩溃报告库,其中一些(例如 ACRA)将支持您的反馈选项。实现崩溃报告器有点棘手,因为当您崩溃时您的应用程序的进程处于不稳定状态,这就是我们为此目的测试和调试库的原因。

这可以简单地启用,例如通过启用 Google Play 商店控制台上的选项或通过在清单中添加一些东西来启用吗?

作为将它们添加到您的应用程序的一部分,这些库将向清单中添加一些内容。

于 2017-12-04T15:57:56.797 回答
0

Just use Fabric and their Crashlytics platform - this will flag any crashes detected without involving user input. It will automatically notify you when any crashes are detected and will identify specific issues, including a stacktrace and versioning. This is in addition to their many other useful features tied into their platform - they've also now joined the Firebase team so more to follow over the coming weeks/months. I've been using the platform over the past few months to analyse 25 of my applications and found it highly effective to identify and fix any issues that have arisen.

于 2018-01-11T18:13:35.820 回答
0

有很多库可以做到这一点,但如果你像我一样,不喜欢通用库的开销来完成这样一个简单的任务,那么你自己很容易做到。

这里有几个步骤可以帮助您:

1)添加一个扩展应用程序的类(如果你还没有)。

2) 在它的onCreate 中使用Thread.setDefaultUncaughtExceptionHandler来设置一个自定义的UncoughtExceptionHandler。

3) 在自定义处理程序中,使用带有Intent.FLAG_ACTIVITY_NEW_TASK标志的意图启动活动。对于这个活动android:process=":crash",在清单中添加属性(crash可以是任何你想要的)。此步骤将确保新活动将在不同的进程上启动(这很重要,因为旧的活动已经崩溃,现在由于异常而处于堆栈回滚过程中)。

4)在这个活动中,做任何你需要的事情。(展示您想要的崩溃报告 UI,和/或向您自己发送电子邮件)。JavaMail 非常适合静默电子邮件。

注意:在 UncaughtExceptionHandler 中,你会得到线程和崩溃的异常。您可以使用以下方法轻松提取堆栈跟踪:
final StringWriter stackTrace = new StringWriter(); exception.printStackTrace(new PrintWriter(stackTrace)); 和/或提取线程名称(如果需要),然后使用意图的捆绑包将它们发送到活动。

希望这可以帮助

于 2017-12-04T18:33:00.717 回答