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

时间:2018-06-21 13:57:05

标签: android firebase crashlytics

我正在使用Firebase中的Crashlytics,崩溃报告可以很好地上传到Crashlytics控制台。现在,我的意图是仅在用户同意的情况下上载崩溃报告。为此,我想向用户显示报告,并询问他/她是否希望发送报告。我想在每次发生崩溃时都这样做。这可能吗?

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

  

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

     

要做到这一点,您必须禁用自动收集功能,并仅对选择加入的用户初始化Crashlytics。

     
      
  1. 在您的AndroidManifest.xml文件中使用元数据标签关闭自动收集:
  2.   
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
  

通过初始化应用活动之一的Crashlytics,为选定的用户启用收集功能:

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

但是我希望能够捕获崩溃,并在再次启动该应用程序时显示该对话框,并提供相关信息,并征求用户同意,将其上载到Crashlytics控制台。

1 个答案:

答案 0 :(得分:1)

您可以创建自定义UncaughtExceptionHandler

  1. 在您的Application类中,您像往常一样启动Crashlytics。
  2. 然后将默认的异常处理程序设置为您的自定义变量:

    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来显示对话框。