Ionic 5(Cordova)中phonegap-plugin-push在Android12+及iOS无法接收推送
解决Ionic 5 + Cordova项目中phonegap-plugin-push在Android 12+及iOS的推送接收问题
Android 12+ 解决方案
1. 升级插件到最新版本
phonegap-plugin-push旧版本未适配Android 12的PendingIntent规则和通知权限要求,先卸载并重装最新版:
cordova plugin remove phonegap-plugin-push cordova plugin add phonegap-plugin-push@latest
2. 配置通知渠道(Android 8+强制要求)
初始化Push插件时必须指定通知渠道信息,否则推送无法显示:
import { Push, PushObject, PushOptions } from '@ionic-native/push/ngx'; constructor(private push: Push) {} initPush() { const options: PushOptions = { android: { senderID: "你的FCM Sender ID", channel: "custom_notification_channel", // 自定义渠道ID channelName: "通知渠道名称", channelDescription: "渠道描述", sound: true, vibrate: true } }; const pushObject: PushObject = this.push.init(options); // 监听注册、接收事件 pushObject.on('registration').subscribe(data => { console.log('设备注册ID:', data.registrationId); }); pushObject.on('notification').subscribe(notification => { console.log('收到推送:', notification); // 处理推送逻辑 }); }
3. 适配Android 13+的通知权限
Android 13+需要主动申请POST_NOTIFICATIONS权限,可借助cordova-plugin-android-permissions实现:
cordova plugin add cordova-plugin-android-permissions
在代码中请求权限后再初始化Push:
import { AndroidPermissions } from '@ionic-native/android-permissions/ngx'; constructor(private androidPermissions: AndroidPermissions, private push: Push) {} async setupPush() { const hasPermission = await this.androidPermissions.checkPermission( this.androidPermissions.PERMISSION.POST_NOTIFICATIONS ); if (!hasPermission.hasPermission) { const result = await this.androidPermissions.requestPermission( this.androidPermissions.PERMISSION.POST_NOTIFICATIONS ); if (!result.hasPermission) { console.log('用户拒绝了通知权限'); return; } } // 初始化Push插件 this.initPush(); }
4. 检查AndroidManifest配置
确保AndroidManifest.xml中包含必要权限(插件通常会自动添加,但可手动验证):
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
iOS 解决方案
1. 升级插件并验证证书
确保使用最新版phonegap-plugin-push,同时检查APNs证书:
- 登录Apple开发者后台,确认推送证书(开发/生产环境)未过期、绑定的Bundle ID与项目一致
- 证书需正确导入到推送服务端(如FCM或自行搭建的推送服务)
2. 开启Xcode推送相关能力
- 打开项目的
platforms/ios目录下的.xcworkspace文件 - 选择项目target,进入
Signing & Capabilities标签 - 添加
Push Notifications能力 - 在
Background Modes中勾选Remote notifications
3. 配置权限提示文案
在info.plist中添加通知权限的说明文案(iOS 10+要求):
<key>NSNotificationSettingsUsageDescription</key> <string>接收推送通知以便及时获取重要消息</string> <key>NSRemoteNotificationUsageDescription</key> <string>接收推送通知以便及时获取重要消息</string>
4. 验证设备权限
确保iOS设备的通知权限已开启:
- 进入设备
设置→通知→ 找到你的App → 开启允许通知及相关选项
通用排查步骤
- 查看设备日志:Android用
adb logcat搜索PushPlugin相关报错;iOS用Xcode控制台查看推送相关日志 - 验证推送服务端:确认FCM/APNs的配置参数(如服务器密钥、证书)正确,推送请求返回成功
- 测试环境区分:开发环境用开发证书/FCM测试服务器,生产环境用生产证书/正式服务器
内容的提问来源于stack exchange,提问作者SHAILESH PENDAM
相关产品推荐
相关产品推荐

