首页 文章

显示对话框,要求用户在Firebase Crashlytics发生崩溃后报告崩溃

提问于
浏览
4

我正在使用Firebase的Crashlytics,崩溃报告已经上传到Crashlytics控制台 . 现在我的意图是仅在用户同意的情况下上传崩溃报告 . 为此我想向用户显示报告并询问他/她是否想要发送报告 . 我希望每次发生的崩溃都能做到这一点 . 这可能吗?

到目前为止,我只在文档中找到了如何启用选择加入报告

默认情况下,Firebase Crashlytics会自动为您的所有应用用户收集崩溃报告 . 要让用户更好地控制他们发送的数据,您可以启用选择加入报告 . 为此,您必须禁用自动收集并仅为选择加入的用户初始化Crashlytics . 使用AndroidManifest.xml文件中的元数据标记关闭自动收集:

<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />

通过从您的应用程序的某个活动初始化Crashlytics,为所选用户启用集合:

Fabric.with(this, new Crashlytics());

但是我希望能够在崩溃发生时捕获崩溃,并且当应用程序再次启动时显示带有信息的对话框并要求用户同意将其上载到Crashlytics控制台 .

1 回答

  • 1

    您可以创建自定义 UncaughtExceptionHandler .

    • 在您的 Application 课程中,您像往常一样启动Crashlytics .

    • 然后将默认异常处理程序设置为自定义处理程序:

    UncaughtExceptionHandler customHandler = 
        new UserAgreementExceptionHandler(Thread.getDefaultUncaughtExceptionHandler());
    Thread.setDefaultUncaughtExceptionHandler(customHandler);
    

    在这种情况下,所有未捕获的异常都将传递给您的处理程序 . 下一个目标是根据您的需求定制它 . 它看起来像这样:

    public class UserAgreementExceptionHandler implements Thread.UncaughtExceptionHandler {
    
      @NonNull
      private Thread.UncaughtExceptionHandler defaultHandler;
    
      public UserAgreementExceptionHandler(@NonNull Thread.UncaughtExceptionHandler defaultHandler) {
        this.defaultHandler = defaultHandler;
      }
    
      @Override
      public void uncaughtException(Thread thread, Throwable ex) {
        // Show dialog to user, pass callbacks for answers inside
    
        // If user agreed to send the data, 
        // call the default handler you passed on object creation:
    
        // defaultHandler.uncaughtException(thread, ex);
    
        // Otherwise, don't pass it further
      }
    }
    

    唯一的问题是如何从它开始一个对话框,它取决于你的应用程序架构 . 您可以在其中注入一些业务逻辑类,等待使用屏幕上的 Activity Context 显示对话框 .

相关问题