Cordova Ionic应用在Android12/13推送通知失效求助
Android 12+ 推送通知接收问题排查思路
1. 检查Android 12+ 专属权限配置
- 确认
AndroidManifest.xml中已添加POST_NOTIFICATIONS权限:<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> - 必须在应用运行时主动请求该权限,Android 12+不再允许仅通过清单声明自动获取通知权限。可借助
cordova-plugin-android-permissions实现:const permissions = cordova.plugins.permissions; permissions.requestPermission(permissions.POST_NOTIFICATIONS, () => console.log("通知权限已授权"), err => console.error("通知权限授权失败", err) );
2. 验证FCM插件的Android 12+适配性
- 确认使用的FCM插件(如
cordova-plugin-fcm-with-dependecy-updated)已更新至最新版本,旧版本插件通常未适配Android 12的通知渠道强制要求。 - 确保已创建有效的通知渠道,Android 12+所有推送必须关联渠道:
if (cordova.platformId === 'android') { FCM.createNotificationChannel({ id: "default_push_channel", name: "应用推送通知", description: "接收应用各类推送消息", importance: "high" }); } - 发送推送时必须指定正确的渠道ID,否则通知会被系统拦截。
3. 核对cordova-android 11.x配置细节
- 确认
config.xml中targetSdkVersion已设置为31(Android 12对应API版本)或更高:<preference name="android-targetSdkVersion" value="31" /> - 检查自定义Activity的
android:exported属性,cordova-android 11.x会自动处理默认Activity的该属性,但自定义Activity需手动设置(启动类设为true,其他按需配置)。
4. 验证FCM令牌有效性
- 应用启动时重新获取并打印FCM令牌,确认令牌正常刷新并上传至服务器:
FCM.getToken().then(token => { console.log("当前FCM令牌:", token); // 将令牌同步到你的推送服务器 }); - 直接通过Firebase控制台向该令牌发送测试推送,排查是应用接收环节还是服务器发送逻辑的问题。
5. 排查系统后台限制与电池优化
- Android 12+对后台应用管控更严格,需确认应用已加入电池优化白名单,可通过代码请求忽略优化:
cordova.plugins.batteryOptimization.isIgnoringBatteryOptimizations(result => { if (!result) { cordova.plugins.batteryOptimization.requestIgnoreBatteryOptimizations(); } }); - 针对小米、华为、OPPO等厂商定制系统,需引导用户开启应用的「自启动权限」「后台运行权限」,这类厂商会额外限制后台应用的推送接收。
6. 查看系统级通知日志
- 用Android Studio的Logcat过滤
NotificationManager或FirebaseMessaging关键词,查看推送是否被系统接收、是否因渠道配置错误被拦截等细节。 - 检查
NotificationService相关日志,确认通知的流转状态。
7. 确认推送消息格式适配
- 针对Android 12+设备,避免使用已弃用的通知属性(如
priority),改用通知渠道的importance控制通知优先级。 - 若使用数据消息(Data Message),需确保应用在后台时能正确接收并触发本地通知;若使用通知消息(Notification Message),需保证
notification字段的内容符合Android 12+的展示要求。
内容的提问来源于stack exchange,提问作者DanielRead
相关产品推荐
相关产品推荐

