【问题标题】:How to log non-fatal (caught) exceptions with Firebase (Crashlytics)如何使用 Firebase (Crashlytics) 记录非致命(捕获)异常
【发布时间】:2019-01-13 19:26:58
【问题描述】:

我开始在我的项目中使用 Firebase (Crashlytics) 来跟踪应用崩溃。它与崩溃完美配合,但我如何记录非致命崩溃,即捕获的异常。我试过Crashlytics.logException(e),但它不起作用。我在仪表板中看不到任何报告。我看到建议使用FirebaseCrash.report(t) 的答案,但最新版本的 Firebase 中不存在此类。那么有人知道它是怎么做的吗?

依赖关系:

implementation 'com.google.firebase:firebase-core:16.0.0'
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.3'

【问题讨论】:

  • 您是否在记录异常后杀死并重新启动了您的应用程序?
  • 即使在最新版本的 Crashlytics 上,Crashlytics.logException(ex) 也是不错的选择。您是在调试还是发布版本上进行测试?我从来没有遇到过使用Crashlytics.logException(ex) 记录非致命事件的问题。
  • 谢谢大家。毕竟它确实有效。似乎只需要更长的时间才能在仪表板中显示非致命异常,或者像 @DougStevenson 所说的你必须杀死并重新启动应用程序。
  • +1 需要终止并重新启动应用程序。我的测试应用程序有一个前台服务,所以我必须重新安装该应用程序才能在报告上传之前获得一个新进程。仅供参考,当事件被发送回 Firebase Crashlytics 时,您会在 logcat 中看到这一点:I/CrashlyticsCore: Crashlytics report upload complete:
  • firebase 是否与 implementation 'com.crashlytics.sdk.android:crashlytics:2.9.3' 依赖同步??

标签: android firebase crashlytics


【解决方案1】:

对于新的 Firebase Crashlytics,您应该使用 recordException(@NonNull Throwable throwable)

...
catch (e: Exception) {
    FirebaseCrashlytics.getInstance().recordException(e)
}
...

这是firebase documentation 声明

【讨论】:

  • 我找不到这个recordException(e) 我认为它已被删除
  • 感谢您提供链接,许多 Firebase“入门”文档出于某种原因省略了 Crashlytics 依赖项,但您发布的“升级”指南是完整且准确的。
  • @miladsalimi 也许您使用的是FirebaseAnalytics 而不是FirebaseCrashlytics
【解决方案2】:

你可以使用

FirebaseCrashlytics.getInstance().recordException(e)

在 crashlytics 上记录非致命问题

【讨论】:

  • 不适用于我在我的应用程序中放入的相同代码。我每天有 3K 用户,但 firebase 没有显示一次崩溃。
  • 请检查它是否在 Application 类中正确初始化。分享您的代码,以便我们为您提供帮助
  • Crashlytics 中没有名为“logException”的方法
  • 如何在 firebase crashlytics 控制台中查看非致命日志?
  • docs。您还可以使用Crashlytics.log 将其他信息附加到崩溃报告中。更多here.
【解决方案3】:

确保在 Application 类中添加以下代码,这些代码附加在 AndroidManifest.xml 中 -

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        .
        .
        .
        FirebaseApp.initializeApp(this);
        FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);
        .
        .
        .
    }
}

然后调用预期的方法-

FirebaseCrashlytics.getInstance().recordException(myException)

【讨论】:

  • FirebaseApp.initializeApp(this) 不是必需的,它在由ContentProviders 初始化时由 Firebase 库在内部处理。 setCrashlyticsCollectionEnabled 也是默认启用的,afaik。
【解决方案4】:

模块构建.gradle

 apply plugin: 'com.google.firebase.crashlytics'
 apply plugin: 'com.google.gms.google-services'
  android {...

 dependencies {
   implementation 'com.google.firebase:firebase-analytics-ktx:17.5.0'
   implementation 'com.google.firebase:firebase-crashlytics-ktx:17.2.1'

项目构建.gradle

   dependencies {
    classpath "com.android.tools.build:gradle:4.0.1"
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
    classpath 'com.google.gms:google-services:4.3.3'
    classpath 'com.google.firebase:firebase-crashlytics-gradle:2.3.0'
}

MainActivity.kt

 class MainActivity : AppCompatActivity() {
    companion object {
         lateinit var mCrash: FirebaseCrashlytics           
         lateinit var instance: MainActivity
         private set
     }
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
         instance = this
        FirebaseApp.initializeApp(instance)
         mCrash = FirebaseCrashlytics.getInstance()
           val exception = Exception("test Exception")
           mCrash.recordException(exception)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-31
    • 2023-02-21
    • 2018-05-13
    • 2018-06-20
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多