Ionic3使用phonegap-plugin-push遇SERVICE_NOT_AVAILABLE问题求助
我之前维护Ionic3项目时也碰到过一模一样的问题,折腾了好一阵才摸清楚解决思路,给你整理几个经过验证的可行方案:
优先检查设备Google Play服务状态
这个错误最常见的诱因就是设备上的Google Play Services版本过低、未安装,或者被定制ROM阉割了。如果是海外设备,直接让用户去Google Play商店更新到最新版就行;如果是国内无GMS的设备,得先安装完整的GMS组件(注意合规性),有些定制ROM需要刷入对应的GMS包才能正常连接FCM。核对插件初始化配置细节
确保push插件的初始化参数完全正确,尤其是Android端的senderID必须是FCM控制台里的项目编号(不是API Key),给你个标准的初始化示例参考:const pushObject = Push.init({ android: { senderID: "你的FCM项目Sender ID", forceShow: true, // 部分设备需要强制显示通知 clearNotifications: true }, ios: { alert: "true", badge: "true", sound: "true" }, windows: {} });另外可以反编译APK检查AndroidManifest.xml,确认是否自动生成了
com.google.android.gms.gcm.GcmReceiver相关注册,以及meta-data里的com.google.firebase.messaging.default_notification_channel_id是否配置正确。排查网络环境限制
FCM需要连接fcm.googleapis.com等域名,如果设备所在网络屏蔽了这些地址(比如国内部分网络),就会触发这个错误。可以让用户切换到外网或者VPN测试,同时检查设备的防火墙、安全软件是否禁止了应用访问网络,确保应用已经申请了android.permission.INTERNET权限。重新安装插件并清理缓存
插件安装不完整或缓存冲突也可能导致问题,试试这套操作:- 移除现有插件:
cordova plugin remove phonegap-plugin-push - 清理Ionic项目缓存:
ionic cordova clean - 重新安装适配Ionic3的插件版本(推荐v2.3.0,新版本可能不兼容旧框架):
cordova plugin add phonegap-plugin-push@2.3.0 --variable SENDER_ID="你的Sender ID" - 重新构建项目:
ionic cordova build android
- 移除现有插件:
验证系统版本与插件兼容性
旧版Android系统(比如低于6.0)和新版本插件可能存在兼容性问题,如果你用了最新版插件,试试降级到适配旧系统的版本。同时确保项目的targetSdkVersion和compileSdkVersion与Ionic3兼容,通常推荐设置在28左右。测试FCM令牌获取流程
在初始化push后,监听registration事件确认是否能正常获取令牌:pushObject.on('registration').subscribe((data) => { console.log('FCM令牌:', data.registrationId); // 将令牌同步到你的服务器 });如果令牌获取失败,说明FCM初始化环节有问题,回到前面的步骤排查;如果能拿到令牌但收不到通知,大概率是服务器端推送的payload格式或目标令牌有误。
内容的提问来源于stack exchange,提问作者Walid

