Firebase消息在安卓设备上接收时突然崩溃。

50

目前使用React Native、React Native Firebase和React Native Push Notification。一切都很顺利,直到今天Firebase消息推送开始导致应用程序崩溃。错误信息如下:

    Process: com.packagename, PID: 30087
    java.lang.AbstractMethodError: abstract method "com.google.android.gms.tasks.Task com.google.firebase.iid.WithinAppServiceBinder$IntentHandler.zza(android.content.Intent)"
        at com.google.firebase.iid.WithinAppServiceBinder.zza(com.google.firebase:firebase-iid@@20.2.2:9)
        at com.google.firebase.iid.zzaw.zza(com.google.firebase:firebase-iid@@20.2.2:30)
        at com.google.firebase.iid.zzaw.onServiceConnected(com.google.firebase:firebase-iid@@20.2.2:59)
        at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:2067)
        at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:2099)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:8016)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076)

当收到通知但未触发数据消息时,该错误会发生。此外,在导致崩溃之前,会接收和处理通知。

我认为这个错误可能是由于更改了react-native-firebase/app版本引起的,因此我将我的项目在git上还原到先前的工作版本。然而,即使在React Native端没有设置通知监听器,仍然会出现同样的错误,尽管我不确定这对实际的本地代码意味着什么。可能的问题是什么?我正在使用之前可用的react-native-firebase/messaging(7.1.5)和react-native-firebase/app(7.2.0)版本。

6个回答

45

2020年7月9日更新:我们发布了firebase-iidfirebase-messaging的版本20.2.3,解决了此问题,请升级到最新版本。


[Firebase团队]看起来昨天发布的firebase-messagingfirebase-iid版本存在一个导致崩溃的错误。我们正在努力修复它。

目前最好的做法是使用在6月18日发布的版本: https://firebase.google.com/support/release-notes/android#2020-06-18

  • com.google.firebase:firebase-messaging:20.2.1
  • com.google.firebase:firebase-iid:20.2.1

我们正在努力修复此问题,并希望尽快发布新版本。一旦发布,我将更新此答案,发布说明将在此处提供: https://firebase.google.com/support/release-notes/android


谢谢更新,@sam-stern!我也遇到了这个问题,请在有消息时告诉我们。 - Mauricio Coniglio
Firebase的Iid是否也可以通过在android/build.gradle中添加firebaseIidVersion = "20.2.1"来设置? - jonan.pineda

39

我们尝试将firebaseMessagingVersion = "20.2.1"添加到根项目android/build.gradleext部分中,这对我们有帮助。我们查看了safeExtGet方法,发现它会尝试从根项目文件中提取顶层变量。

通过这种方式,我们不需要触及节点模块。

ext {
        googlePlayServicesVersion = "16.+"
        firebaseVersion = "17.3.4"
        firebaseMessagingVersion = "20.2.1"
    }

这也是我最终所做的,我会将其标记为正确答案。 - tenkay
我也遇到了同样的问题,这个解决方案真是救了我一命。谢谢! - sheriff_paul
是的,降级成功了。感谢您指出这一点。 - Anirudh Ganesh
降级是正确的解决方案,请参见我下面的答案以获取更多信息。 - Sam Stern

12

这些版本存在完全相同的问题。是的,在此之前它们是可用的。

问题已解决:

  1. 打开 react-native-push-notification/build.gradle
  2. 将 def firebaseVersion = safeExtGet('firebaseVersion', '+') 更改为 def firebaseVersion = safeExtGet('firebaseVersion', '20.2.1')

它正在使用不稳定的版本20.2.2,导致了各种奇怪的问题。


哇,这样做就可以了,非常感谢!我因为这个问题快疯了。 - tenkay
1
顺便说一下,对我来说是firebaseMessagingVersion,在任何其他人看到这个并且有同样的问题时。 - tenkay
1
谢谢!@tenkay 我必须像你一样做,implementation "com.google.firebase:firebase-messaging:${safeExtGet('firebaseMessagingVersion', '20.2.1')}" - tomyates
当你重新安装节点模块时,这不会被清除吗?另外,它也不会提交到版本控制中(假设你已经将node_modules添加到了.gitignore文件中)。我是RN的新手,也许我理解错了什么。 - Hans
是的,它会被清除。在这种情况下,我建议遵循已接受的答案,但如果您需要更改 node_modules 中的任何内容,patch-package 是一个方便的解决方案。 - tenkay

5

这次升级解决了我的问题。

implementation 'com.google.firebase:firebase-messaging:20.2.3'

这对我有用。我已经苦恼了两天了。 - Mr. Disability

0

这个案例对我有效:

implementation "com.google.firebase:firebase-messaging:20.2.3"
implementation "com.google.firebase:firebase-analytics:17.4.4"

参考到Github问题


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接