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

Android 显示对话框,要求用户在Firebase Crashlytics发生崩溃后报告崩溃,android,firebase,crashlytics,Android,Firebase,Crashlytics,我使用的是Firebase的Crashlytics,崩溃报告已经很好地上传到Crashlytics控制台。现在我的意图是只有在用户同意的情况下才能上传崩溃报告。为此,我想向用户显示报告,并询问他/她是否想要发送报告。我想对每一次发生的车祸都这么做。这可能吗 到目前为止,我只在文档中找到了如何启用选择性加入报告 默认情况下,Firebase Crashlytics会自动收集所有应用程序用户的崩溃报告。为了让用户更好地控制他们发送的数据,您可以启用选择性加入报告 要做到这一点,您必须禁用自动收集,并

我使用的是Firebase的Crashlytics,崩溃报告已经很好地上传到Crashlytics控制台。现在我的意图是只有在用户同意的情况下才能上传崩溃报告。为此,我想向用户显示报告,并询问他/她是否想要发送报告。我想对每一次发生的车祸都这么做。这可能吗

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

默认情况下,Firebase Crashlytics会自动收集所有应用程序用户的崩溃报告。为了让用户更好地控制他们发送的数据,您可以启用选择性加入报告

要做到这一点,您必须禁用自动收集,并仅为opt-in用户初始化Crashlytics

  • 使用AndroidManifest.xml文件中的元数据标记关闭自动收集:

  • 但我希望能够在崩溃发生时捕获崩溃,并在应用程序再次启动时显示包含信息的对话框,并请求用户同意将其上载到Crashlytics控制台。

    您可以创建自定义
    UncaughtExceptionHandler

  • 应用程序
    类中,像往常一样初始化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
      }
    }
    

    唯一的问题是如何从中启动对话框,这取决于您的应用程序架构。您可以在其中插入一些业务逻辑类,该类将使用屏幕上的
    活动上下文等待显示对话框。

    通过“1…您像往常一样初始化Crashlytics”,您的意思是您不在Crashlytics中启用opt-in,配置由@belen描述(元数据为“false”)?是的,您是对的。没有通常的选择加入机制。
    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
      }
    }