在运行时禁用/启用 Firebase Crashlytics
Posted
技术标签:
【中文标题】在运行时禁用/启用 Firebase Crashlytics【英文标题】:Disable/Enable Firebase Crashlytics during runtime 【发布时间】:2018-09-02 10:26:45 【问题描述】:随着 Google 发出一波波关于需要让用户选择加入崩溃报告的警告 (source),我正在尝试为 Firebase Crashlytics 构建一个选择加入对话框。
为了能够做到这一点,我需要知道当前是否启用了 Crashlytics(以决定是否显示对话框)。似乎CrashlyticsCore.disabled
负责跟踪这个,但我还没有找到任何访问该值的方法,因为它是包私有的并且没有访问器。我如何在运行时知道 Firebase Crashlytics 是否已启用?
我需要做的第二件事是默认禁用崩溃报告,并在用户同意选择加入时启用它。我如何怀疑能够做到这一点:
androidManifest:
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
活动:
boolean userAgrees = true;
CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(!userAgrees).build();
Fabric.with(this, new Crashlytics.Builder().core(core).build());
throw new RuntimeException("why doesn't this show up in Firebase Crashlytics?");
为什么我的 RuntimeException 没有出现在 Firebase Crashlytics 中?
附:删除这些尝试以创建选择加入对话框时,Crashlytics 工作正常。
【问题讨论】:
你正在使用crashlytics:2.9.1
构建吗?当我使用该版本时,您的代码对我有用。另外,在您的测试过程中,请注意直到下次应用重新启动时才会上传崩溃。
是的,我正在使用2.9.1
。您能在 Firebase 或 Fabric 环境中看到崩溃报告吗?也许这是一个线程问题,因为我确实在 Activity 的onCreate
中抛出了RuntimeException
,所以也许我正在崩溃我的应用程序,而 crashlytics 仍在另一个线程上上传之前的崩溃?我以为它是通过 Play 服务上传的,所以从没想过下一次应用重启。我会做更多的测试。
我在 Firebase 控制台中看到了崩溃。
【参考方案1】:
似乎切换 Crashlytics 只会在您的应用重启后生效。 Fabric
是一个单例,所有对其Fabric.with
方法的调用在初始化后都将被忽略。 源码如下。
public static Fabric with(Context context, Kit... kits)
if (singleton == null)
Class var2 = Fabric.class;
synchronized(Fabric.class)
if (singleton == null)
setFabric((new Fabric.Builder(context)).kits(kits).build());
return singleton;
解决此问题的一种方法是使用SharedPreferences
或其他持久存储方法自己跟踪值并相应地更新您的 UI。
【讨论】:
我知道如何自己保存一个布尔值,但我不喜欢这样做,因为它的代码很混乱,如果我的布尔值由于错误而与 sdk 不同步,那你就违法了。跨度>以上是关于在运行时禁用/启用 Firebase Crashlytics的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 应用程序运行时启用/禁用 Crashlytics