Android Firebase 在 MessagingAnalytics 中崩溃

标签 android firebase crash firebase-cloud-messaging

异常

我们在 Google Play 中发现大量与 Firebase 相关的崩溃。

异常发生在两种方法中:

  • com.google.firebase.messaging.MessagingAnalytics.logNotificationDismiss
  • com.google.firebase.messaging.MessagingAnalytics.logNotificationReceived

堆栈跟踪示例:

at com.google.firebase.FirebaseApp.getInstance(com.google.firebase:firebase-common@@16.0.1:219)
  at com.google.firebase.messaging.MessagingAnalytics.zza (Unknown Source)
  at com.google.firebase.messaging.MessagingAnalytics.logNotificationReceived (Unknown Source)
  at com.google.firebase.messaging.FirebaseMessagingService.zzd (Unknown Source)
  at com.google.firebase.iid.zzc.run (Unknown Source)
  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:607)
  at com.google.android.gms.common.util.concurrent.zza.run (Unknown Source)
  at java.lang.Thread.run (Thread.java:762)

调查

我们进行了调查并找到了原因:

  • Firebase 自身初始化时会发生异常。
  • 当设备安装的 Google Play 服务版本已过时时,可能会出现这种情况。
  • 我们通过将所有 Firebase 调用包装为 try/catch block ,成功解决了应用代码中的此问题。
  • 但是,这对 logNotificationDismisslogNotificationReceived 没有帮助,因为我们无法控制此代码。

Google 支持

我们已向 Firebase 团队通报了该问题,并花了一周时间与支持人员进行交流。然而,他们告诉我们,在我们发送重现崩溃的版本之前,他们甚至不会考虑这个问题。我们对问题是特定于设备的解释没有帮助。

问题

我们可以采取哪些措施来防止 com.google.firebase.messaging.MessagingAnalytics 导致我们的应用程序崩溃?

最佳答案

我们已经成功解决了这个问题。

  1. 提取 AAR com.google.firebase.firebase-messaging-X.X.X.aar
  2. 提取classes.jar
  3. 反编译 MessagingAnalytics 类
  4. logNotificationDismisslogNotificationReceived 添加 try catch
  5. 编译回 MessagingAnalytics
  6. 打包回classes.jar
  7. 打包回 AAR
  8. 替换项目中的 AAR

关于Android Firebase 在 MessagingAnalytics 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52169115/

相关文章:

android - 如何从 Firebase 中的实时数据库获取数组

firebase - 如何在 Firebase 托管中关闭默认域 - firebase

iphone - iOS - 全局异常处理程序

android - ACRA总是被禁用吗?

c++ - memcpy 导致程序因初始化目标而崩溃

android - BaseAdapter 的问题

java - android服务中的onResume

自 Android 6 Marshmallow 以来,javax.crypto.Cipher 的工作方式有所不同

android - 如何使用 Activity 页面而不是 Fragment 进行 Android 页面滑动?

javascript - Vuex Store 对象 Child 返回 undefined,parent 正确返回。为什么?