【问题标题】:How to add a Send feedback option on an app crashing?如何在应用程序崩溃时添加发送反馈选项?
【发布时间】:2017-12-04 15:53:58
【问题描述】:

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

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

我很惊讶没有一种简单的方法来实现这一点,而无需在整个应用程序中放置一个 try catch。这可以简单地启用吗?通过在 Google Play 商店控制台上启用一个选项或通过向清单中添加一些内容?

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

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

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

和 8.0:

【问题讨论】:

    标签: android google-play crashlytics google-fabric user-feedback


    【解决方案1】:

    我很惊讶没有一个简单的方法来实现它而不在整个应用程序中放置一个 try catch

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

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

    这可以简单地启用吗?通过在 Google Play 商店控制台上启用一个选项或通过向清单中添加一些内容?

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

    【讨论】:

    • 我们正在使用 Crashlytics。我会深入研究一下,看看能不能找到这样的选项。
    • @TTransmit:我没有使用过 Crashlytics,但我希望他们会有某种“将 cmets 添加到崩溃报告”选项。
    • 我在 Crashlytics 的文档或选项中找不到任何内容。我在 Firebase 文档中也找不到任何内容。我猜谷歌自己的应用程序使用 Firebase。我已经有几年没有使用过 ACRA 了,而且它看起来也没有得到积极的维护。
    • @TTransmit:ACRA 正在积极维护中。在过去的几个月里,没有太多需要改变,仅此而已。见the change log
    • @CommonsWare 实现崩溃报告器一点也不难。 10分钟的工作上衣。详情见我的回答
    【解决方案2】:

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

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

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

    【讨论】:

    • 那篇博文已有七年半了。我添加了最近设备上的行为图像。
    • 这个答案是对的! @TTransmit 将应用程序发布到 Playstore 后,“发送反馈”选项将可见。我认为您无法看到它,因为您正在测试的应用程序是不是直接从 Playstore 下载的应用程序版本。
    • 这不适用于我正在开发的已在 Play 商店上架一年的应用程序。
    • 这很奇怪。如果是这样,我会要求您提交针对 Android 的错误并从他们那里获得帮助。因为它适用于我们团队在 Playstore 中发布的应用程序。没有做任何额外的事情来启用“发送反馈”功能。
    【解决方案3】:

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

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

    1) 添加一个扩展 Application 的类(如果您还没有)。

    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)); 和/或在需要时提取线程名称,然后使用意图的包将它们发送到活动。

    希望对你有帮助

    【讨论】:

    • 使用Application#onCreate() 不适用于所有场景(例如,ContentProvider 中的崩溃)。发送电子邮件需要您输入 SMTP 帐户名和密码,它们将被轻松提取并用于发送垃圾邮件。
    • @CommonsWare 你是对的。就我而言,我有自己的 SMTP 服务器,不需要 ContentProvider 崩溃报告。但我敢肯定,如果我将来需要它,添加它并不难。
    【解决方案4】:

    只需使用Fabric 和他们的 Crashlytics 平台 - 这将标记检测到的任何崩溃,而无需用户输入。它会在检测到任何崩溃时自动通知您,并识别特定问题,包括堆栈跟踪和版本控制。这是除了与他们的平台相关的许多其他有用功能之外 - 他们现在还加入了 Firebase 团队,因此在接下来的几周/几个月内会有更多人关注。在过去的几个月里,我一直在使用该平台分析我的 25 个应用程序,发现它可以非常有效地识别和解决出现的任何问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 2017-09-27
      • 2012-11-19
      相关资源
      最近更新 更多