Firebase crashlytics不显示崩溃

时间:2019-01-02 06:09:36

标签: android firebase crashlytics crashlytics-android

想要在应用崩溃后从Firebase获取崩溃报告。是否有可能在Firebase崩溃中单独获得调试模式日志和生产崩溃日志?...因为当我们从生产或调试测试中崩溃时并不清楚。 此外,发生崩溃后,firebase不会在控制台上反映崩溃报告。 我应该怎么做才能获得最新的崩溃报告? 除了Firebase,还有其他方法可以获取崩溃报告吗? 我已经更新了Firebase crashlytics所需的库。 和后续教程-https://firebase.google.com/docs/crashlytics/get-started#android

5 个答案:

答案 0 :(得分:3)

Upgrade SDK

为迁移到新的SDK进行相关设置后,务必避免以下错误:

尝试在崩溃时发送崩溃报告。

这可能是由于在FirebaseCrashlytics发送报告之前强制崩溃(在我的情况下,没有按钮进行监听),也就是说, Crashlytics报告端点上传


Test implementation

启用Crashlytics调试日志记录

$ adb devices 
$ adb shell setprop log.tag.FirebaseCrashlytics DEBUG
$ adb logcat -s FirebaseCrashlytics

1)第一步:不要强迫崩溃并运行该应用。观察如何在Crashlyticis logcat中对其进行正确初始化。

...
FirebaseCrashlytics: Update app request ID: 1d62cb...
FirebaseCrashlytics: Result was 204.
Crashlytics Reports Endpoint upload complete

2)第二步:(使用按钮或直接)强制崩溃。

MainActivity.kt

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    setupCrashlytics()

    ...
 }

 private fun setupCrashlytics() {
     throw RuntimeException("Test crash")  //TODO: Clean
 }

注意:生成报告的唯一必要条件就是依赖项之外的此代码。另外,您可以使用FirebaseCrashlytics.getInstance()登录自定义键。

然后运行该应用程序并检查以下内容:

FirebaseCrashlytics: Crashlytics completed exception processing. Invoking default exception handler.
FirebaseCrashlytics: Attempting to send crash report at time of crash...

这时,异常过程已登录到Firebase服务器上,但是报告尚未发送到控制台,即,上传不完整。

3)最后,我们对崩溃崩溃进行清理或发表评论

private fun setupCrashlytics() {
     //throw RuntimeException("Test crash")
}

运行应用,然后检查:

Attempting to send 1 report(s)
FirebaseCrashlytics: Settings result was: 200
FirebaseCrashlytics: Adding single file 5EDA9D7....cls to report 5EDA9D7...
FirebaseCrashlytics: Sending report to: https://reports.crashlytics.com/spi/v1/platforms/android/apps/.../reports
FirebaseCrashlytics: Crashlytics Reports Endpoint upload complete: 5EDABB42 ...

这可以确保报告到达控制台。

GL

答案 1 :(得分:1)

如果您设置了日志自动收集功能,Firebase将不会在crashlytics中的调试版本和生产版本日志/崩溃之间进行区分。仅当应用程序build.gradle具有debug:fasle即Production时,您才可以使用日志记录库发送日志和崩溃。 您可以查看Timber日志记录库,其中提供了添加崩溃报告的绝佳示例。 https://github.com/JakeWharton/timber

您必须禁用清单中的crashlytics的自动初始化,才能控制将崩溃发送到Firebase的时间

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

然后在Application类的onCreate中检查BuildConfig.DEBUG是否为true,否则不会初始化crashlaytics,因此调试日志和异常不会进入firebase,只会导致生产崩溃。

对于木材,当您想将原木和崩溃物放到火基上时,可以使用此树:

/**
     * {@link Timber.Tree} using {@link Crashlytics} as crash reporting
     */
    private static class CrashReportingTree extends Timber.Tree {

        CrashReportingTree(Context context) {
            CrashlyticsCore core = new CrashlyticsCore.Builder()
                    .disabled(BuildConfig.DEBUG)
                    .build();
            Fabric.with(context, new Crashlytics.Builder().core(core).build());
        }

        @Override
        protected void log(int priority, String tag, @NonNull String message, Throwable t) {
            // don't report log to Crashlytics if priority is Verbose or Debug
            if (priority == Log.VERBOSE || priority == Log.DEBUG) {
                return;
            }
            Crashlytics.log(priority, tag, message);

            if (t != null) {
                if (priority == Log.ERROR) {
                    Crashlytics.logException(t);
                }
            }

        }
    }

对于调试模式,您不应将崩溃发送给Firebase,因为可以在本地检查调试日志。

答案 2 :(得分:1)

请删除fabric.properties 并删除所有与fabric 相关的行和文件

答案 3 :(得分:0)

  

是否可以在Firebase崩溃中单独获得调试模式日志和生产崩溃日志?

这是一种常见的做法,甚至建议您创建一个单独的项目进行测试和生产。下载google-services.json并将其放置在构建样式文件夹中

  • ~/app/src/release/google-services.json
  • ~/app/src/debug/google-services.json

即使您只有一个用于测试和生产的Firebase项目,如果您为开发版本设置了项目ID后缀,也可以按应用程序ID过滤日志:

〜/ app / build.gradle

buildTypes {
  release {
  }
  debug {
    applicationIdSuffix '.debug'
    versionNameSuffix '-dbg'
  }
}

在这里您可以看到Crashlytics中提供的不同口味

enter image description here

  

此外,发生崩溃后,firebase不会在控制台上反映崩溃报告。

首次设置crashlytics可能需要一些时间才能在仪表板上显示数据。但是,如果超过24小时,则可能是设置不正确。尝试explicitly trigger a crash以确保其正常工作。

Button crashButton = new Button(this);
crashButton.setText("Crash!");
crashButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        Crashlytics.getInstance().crash(); // Force a crash
    }
});
  

除了firebase之外,还有其他方法可以获取崩溃报告吗?

是的,如果需要,您可以拥有多个崩溃报告工具。您也许可以为崩溃报告创建包装类,在其中将对Crashlytics的调用抽象化,然后可以在其中添加或更改基础报告平台。

答案 4 :(得分:0)

感谢 AllwinJohnson 解决方案,我解决了这个问题: https://github.com/firebase/firebase-android-sdk/issues/1944

通过添加:FirebaseCrashlytics.getInstance() 在我的应用程序类中的 onCreate