添加senderID后React Native推送通知配置致安卓应用崩溃无日志
哥们,我之前也碰到过类似老版本RN推送配置崩溃的棘手问题,结合你用的react-native-push-notification: ^3.0.2和react-native: 0.49.3版本,给你几个针对性的排查和解决方向:
先确认senderID的正确性
别小看这个!老版本的推送库对senderID的要求很严格,它必须是Firebase控制台里的项目编号(纯数字的那个),不是项目ID或者项目名称。直接去控制台复制粘贴纯数字编号,别手动输入避免出错,也检查下有没有多余的空格。排查安卓原生配置的遗漏
加senderID后,推送库会依赖Google服务,老RN版本很容易在这里踩坑:- 打开
android/app/build.gradle,确认已经引入com.google.gms:google-services插件,并且版本建议用11.0.4(和RN0.49.3兼容性最好,太高版本会有冲突):dependencies { // 其他依赖... classpath 'com.google.gms:google-services:11.0.4' } - 确认
google-services.json已经正确放在android/app目录下,而且是对应你senderID的那个项目的配置文件,别放错成其他项目的了。
- 打开
捕捉原生层的崩溃日志
JS层面的try catch和Sentry抓不到原生的崩溃,这是关键!你需要用Android Studio连接真机,打开Logcat,过滤PushNotification或者FirebaseMessaging相关的日志,哪怕是崩溃前的几行日志,都能帮你定位问题。
也可以在安卓原生的MainApplication.java里手动加日志,比如在推送初始化的地方加:Log.d("PushDebug", "开始初始化推送服务");这样能看到崩溃发生在哪个环节。
调整配置方式,绕过JS层初始化的问题
试试把senderID移到安卓原生配置里,不在JS的PushNotification.configure()里设置:
在AndroidManifest.xml里添加对应的meta-data标签:<application> <!-- 其他配置 --> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id"/> </application>然后JS里的configure去掉senderID参数,看看能不能正常运行。
考虑降级推送库版本
react-native-push-notification: ^3.0.2和RN0.49.3的兼容性确实不算好,很多老项目降级到2.3.1后就解决了类似的崩溃问题。你可以修改package.json里的版本号,重新安装依赖后再测试。
如果以上方法都不行,一定要用Android Studio直接打开安卓项目,真机调试看崩溃的堆栈信息,原生层的崩溃肯定会在Logcat里留下痕迹,只是之前没找到正确的打开方式而已。
内容的提问来源于stack exchange,提问作者FrankenStein

