异常
我们在 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 ,成功解决了应用代码中的此问题。
- 但是,这对
logNotificationDismiss
和logNotificationReceived
没有帮助,因为我们无法控制此代码。
Google 支持
我们已向 Firebase 团队通报了该问题,并花了一周时间与支持人员进行交流。然而,他们告诉我们,在我们发送重现崩溃的版本之前,他们甚至不会考虑这个问题。我们对问题是特定于设备的解释没有帮助。
问题
我们可以采取哪些措施来防止 com.google.firebase.messaging.MessagingAnalytics
导致我们的应用程序崩溃?
最佳答案
我们已经成功解决了这个问题。
- 提取 AAR com.google.firebase.firebase-messaging-X.X.X.aar
- 提取classes.jar
- 反编译 MessagingAnalytics 类
- 向 logNotificationDismiss 和 logNotificationReceived 添加 try catch
- 编译回 MessagingAnalytics
- 打包回classes.jar
- 打包回 AAR
- 替换项目中的 AAR
关于Android Firebase 在 MessagingAnalytics 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52169115/