为 Android 禁用 firebase crashlytics

Disable firebase crashlytics for Android

我正在开发 android 应用程序并集成了 firebase 和 firebase crashlytics SDK。

我想允许用户禁用崩溃报告(以确保符合 GDPR - 我假设崩溃报告与 GDPR 相关)因此需要一种方法让用户能够通过应用程序设置禁用它。

我在 https://firebase.google.com/docs/crash/disable-sdk 找到了文档,但是当我尝试时发现行:

FirebaseCrash.setCrashCollectionEnabled(true);

Android Studio 给我错误 cannot resolve symbol 'FirebaseCrash'

这需要在应用程序运行时以编程方式完成。

FirebaseCrash.setCrashCollectionEnabled(true); 在名为 Crashlytics 的新版 Firebase Crash 中不再受支持。更多 https://firebase.google.com/docs/crash/

FirebaseCrash.setCrashCollectionEnabled(true);

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

看看 https://firebase.google.com/docs/crashlytics/upgrade-from-crash-reporting#set_up_manual_initialization

在 运行 时间

禁用 Crashlytics
// Set up Crashlytics, disabled for debug builds
    Crashlytics crashlyticsKit = new Crashlytics.Builder()
    .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build();

    Fabric.with(this, crashlyticsKit);       

Ex

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Set up Crashlytics, disabled for debug builds
    Crashlytics crashlyticsKit = new Crashlytics.Builder()
    .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build();

    Fabric.with(this, crashlyticsKit);
    setContentView(R.layout.activity_main);

}

More

boolean Agrees = value;
if(Agrees)
{
    Fabric.with(this,new Crashlytics());
}
else
 {
   CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(true).build();
   Fabric.with(this,  new Crashlytics.Builder().core(core).build());

throw new RuntimeException("why doesn't this show up in Firebase Crashlytics?");
 }

Edit 2

参考:

Firebase Crashlytics documentation 说明一旦在应用程序会话中启用报告,就无法将其禁用。

默认情况下,Crashlytics 报告在名为 CrashlyticsInitProviderContentProvider 中启用,它在您的 Application 实例创建之前执行。 CrashlyticsInitProvider 根据元数据值 firebase_crashlytics_collection_enabled 启用或禁用报告,默认情况下为 true。

如果您想禁用报告,清单元数据必须存在并设置为 false:

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

在应用程序初始化期间查看 logcat 消息:

CrashlyticsInitProvider: CrashlyticsInitProvider initialization successful

如果消息存在,则 firebase_crashlytics_collection_enabled 为真。如果消息不存在,则您已成功设置元数据以禁用崩溃报告。

如果元数据丢失或设置为 true,则您无法通过调用 Fabric.with(...).

在代码中禁用报告

在对另一个答案的评论中,您表示您尝试使用元数据禁用报告但没有成功。检查拼写错误并确保声明正确放置在 <application> 元素中。在我的测试中,我能够使用元数据禁用报告,然后在 运行 时间启用。

如果您想完全禁用 Firebase 崩溃报告并且也不必添加

com.crashlytics.sdk.android:crashlytics:2.9.1

依赖关系,那么:

将此添加到您应用的 build.gradle:

android {

    // ...

    defaultConfig {
        manifestPlaceholders = [enableCrashReporting:"false"]
        ....
    }

}

然后将其添加到您的 AndroidManifest.xml:

<application ...>

    // ...

    <meta-data 
            android:name="firebase_crashlytics_collection_enabled" 
            android:value="${enableCrashReporting}" />
    <meta-data
            android:name="firebase_analytics_collection_deactivated"
            android:value="true"/>
</application>

在您的模块构建中 gradle...

    release {
        //true value to send the crashlytics to the firebase
        manifestPlaceholders = [crashlyticsCollectionEnabled: "true"]
    }

    debug {
        //false value to stop sending the crashlytics to the firebase
        manifestPlaceholders = [crashlyticsCollectionEnabled: "false"]
    }

清单中

 <meta-data
       android:name="firebase_crashlytics_collection_enabled"
       android:value="${crashlyticsCollectionEnabled}" />

用新的 Firebase Crashlytics beta 取代 Fabric:

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false)

使用新的 Firebase Crashlytics SDK,要禁用崩溃报告,您必须使用此 method : setCrashlyticsCollectionEnabled

if (BuildConfig.DEBUG) {
  FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false)
}
  1. 禁用自动数据收集(清单)
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
  1. 如果不在您的应用程序上调试构建,请启用它。
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG)