【问题标题】:Firebase crashlytics doesnt show crashesFirebase crashlytics 不显示崩溃
【发布时间】:2019-05-28 20:13:54
【问题描述】:

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

【问题讨论】:

  • firebase 需要 24 小时才能显示崩溃报告。
  • 感谢您的快速重播,但我在 24 小时后没有崩溃。那么,我该怎么办?
  • @Urvishrana,我认为这不是真的,就我而言,崩溃会在 5 分钟内更新
  • 是的@Zlytherin 通常它会在几分钟内反映出来。

标签: android firebase crashlytics crashlytics-android


【解决方案1】:

是否可以在 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 中提供的不同风味

此外,发生崩溃后,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 的调用,然后可以在其中添加或更改底层报告平台。

【讨论】:

  • 感谢您的指导。我想实施您的解决方案,如果需要任何帮助,请告知您。
  • 你能解释一下如何制作同一个项目的多个 google-services.json 文件吗?我做了内部和生产两种风格,所以我需要根据应用程序 Id 创建两个 google-services.json 文件。我需要在 firebase 上创建两个不同的项目吗?
  • 您添加到 Firebase 的每个应用都会获得一个 google-services.json。因此,与您将第一个应用程序添加到 Firebase 的方式相同,您可以使用 applicationIdSuffix 重复该风格。无论您是拥有两个独立的 Firebase 项目,还是将两种风格添加到同一个项目中,过程都是相同的。
  • 我在 firebase 上创建了一个新项目以获取新的 google-service.json 文件。
  • 是的,请参阅the documentation 了解如何设置。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    然后在您的 Application 类的 onCreate 中检查 BuildConfig.DEBUG 是否为真,您将不会初始化 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,因为您可以在本地查看调试日志。

    【讨论】:

    • 非常感谢您的简短描述。我想先检查一下,它是否适合我。如果我需要任何帮助,请告诉您。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        对我来说,问题在于模拟器本身。修复模拟器上的日期和时间为我做了这件事,因为它导致了CertificateNotYetValidException

        【讨论】:

          【解决方案7】:

          如果您从 Fabric SDK 迁移到 Firebase Crashlytics,这将有所帮助。 在您的 OnCreate() 中添加以下行运行应用并检查您的 firebase crashlytics 仪表板。

          FirebaseCrashlytics.getInstance().sendUnsentReports();
          

          【讨论】:

            猜你喜欢
            • 2017-02-12
            • 1970-01-01
            • 2020-01-03
            • 2021-07-05
            • 2020-04-05
            • 2019-12-20
            • 2020-12-27
            • 1970-01-01
            • 2019-04-14
            相关资源
            最近更新 更多