使用phonegap-plugin-push 2.0.0+FCM的Android应用接收通知时崩溃求助
解决phonegap-plugin-push 2.0.0 + FCM Android通知崩溃问题
我来给你梳理几个大概率能解决这个崩溃问题的方向,都是基于这个插件版本和FCM集成的常见坑:
1. 先确认核心配置的正确性
- 检查
google-services.json:你在config.xml里已经配置了资源文件映射,但要确保这个文件是直接下载自Firebase控制台,并且和你的Android应用包名完全匹配(包括大小写!Android包名是区分大小写的)。另外,文件要放在项目的根目录,不然插件可能找不到它。 - 核对
SENDER_ID:插件配置里的SENDER_ID要和google-services.json里的project_number一致,别填错格式或者数字。
2. 排查版本兼容性问题
phonegap-plugin-push 2.0.0是比较旧的版本,和新版Cordova Android可能存在冲突:
- 如果你用的是
cordova-android@8.0.0+,建议降级到cordova-android@7.1.4,这个版本和插件2.0.0的兼容性更好。 - 确保
cordova-plugin-device的版本和插件、Cordova版本兼容,你用的2.0.2是没问题的,但如果有其他插件,也要检查它们的版本是否互相兼容。
3. 检查推送初始化代码的合理性
崩溃很多时候是因为通知回调处理不当,尤其是后台接收通知的场景。给你一个标准的初始化示例,你可以对比调整:
var push = PushNotification.init({ android: { senderID: "1:XXXXXXXX:android:YYYYYYY", icon: "icon", // 确保res目录下有这个图标文件 sound: true, vibrate: true, forceShow: true // 强制显示通知,避免后台不触发回调的问题 } }); // 注册成功回调 push.on('registration', function(data) { console.log('注册成功,ID:' + data.registrationId); }); // 通知接收回调 push.on('notification', function(data) { console.log('收到通知:', JSON.stringify(data)); // 后台接收通知时,避免直接做UI操作(比如弹窗),可以先记录日志或者触发自定义逻辑 if (data.additionalData.foreground) { // 前台收到通知,可做UI提示 } else { // 后台收到通知,处理跳转等逻辑要注意空指针 if (data.additionalData.payload) { // 处理自定义payload } } // 必须调用finish,否则可能导致崩溃 data.finish(); }); // 错误回调,一定要加上,方便排查问题 push.on('error', function(e) { console.error('推送错误:', e.message); });
重点注意:后台接收通知时,不要在回调里直接执行UI相关操作,而且一定要调用data.finish()来结束通知处理流程,否则可能导致资源泄漏崩溃。
4. 查看崩溃日志精准定位
以上方法都试了还不行的话,用adb logcat抓崩溃日志是最直接的:
- 连接你的测试设备,运行命令:
adb logcat *:E - 触发通知推送,找到崩溃的堆栈信息,比如
java.lang.NullPointerException或者ClassNotFoundException,根据日志里的类名和方法名,就能精准找到问题所在(比如某个FCM类没找到,或者代码里某个对象未初始化)。
内容的提问来源于stack exchange,提问作者Anilb
相关产品推荐
相关产品推荐

