Cordova跨平台APP本地通知实现方案问询(支持前后台)
实现Cordova跨平台APP前台/后台本地通知的可靠方案
针对你用Cordova + Express开发Android/iOS APP,已经通过phonegap-plugin-push接收GCM推送,现在需要实现全状态(前台/后台)本地通知的需求,我推荐两个经过社区广泛验证的方案,附具体实现步骤:
方案一:使用cordova-plugin-local-notifications(最推荐)
这是目前Cordova生态中最成熟、维护最活跃的本地通知插件,完美支持Android(API 19+)和iOS(10+),且对前台、后台、甚至APP被杀死后的场景都有良好的处理。
1. 安装插件
在项目根目录执行:
cordova plugin add cordova-plugin-local-notifications
2. 基础配置与初始化
在deviceready事件中初始化插件,同时请求通知权限(iOS必须,Android 13+也需要):
document.addEventListener('deviceready', function() { // 请求通知权限 cordova.plugins.notification.local.requestPermission().then(function(granted) { if (granted) { console.log('通知权限已获取'); // 注册通知点击事件监听 cordova.plugins.notification.local.on('click', function(notification) { // 处理通知点击逻辑,比如跳转指定页面 console.log('点击了通知:', notification); }); } else { console.log('用户拒绝了通知权限'); } }); }, false);
3. 发送本地通知
无论APP处于前台还是后台,都可以调用以下方法发送通知:
// 发送即时本地通知 cordova.plugins.notification.local.schedule({ id: 1, // 唯一ID,用于后续更新/取消通知 title: '新消息提醒', text: '你有一条未读消息', foreground: true, // 允许前台显示通知(iOS默认前台不显示,需设为true) sound: 'default', // 播放默认提示音 data: { customData: '自定义数据' } // 携带自定义数据,点击时可获取 }); // 发送延迟通知(比如5分钟后) cordova.plugins.notification.local.schedule({ id: 2, title: '定时提醒', text: '5分钟到了', at: new Date(new Date().getTime() + 5*60*1000), sound: 'default' });
4. 前台/后台适配注意事项
- iOS前台显示:默认iOS在APP前台时不会弹出通知,需要在
schedule选项中设置foreground: true,同时确保在Info.plist中开启UIBackgroundModes的remote-notification(如果之前配置GCM时已经加过,就不用重复加)。 - Android渠道配置:Android 8.0+需要创建通知渠道,插件会自动创建默认渠道,但你也可以自定义:
cordova.plugins.notification.local.createChannel({ id: 'custom_channel', name: '自定义通知渠道', description: '用于展示重要消息', importance: 4 // 对应Android的通知重要等级,4为高 }); // 发送时指定渠道 cordova.plugins.notification.local.schedule({ id: 3, title: '渠道通知', text: '这是自定义渠道的通知', channelId: 'custom_channel' });
方案二:复用phonegap-plugin-push的本地通知功能
如果你不想额外安装插件,phonegap-plugin-push本身也支持发送本地通知,适合已经在使用该插件的场景:
1. 发送本地通知示例
// 假设你已经初始化了push对象 var push = PushNotification.init({ android: { senderID: '你的GCM Sender ID' }, ios: { alert: 'true', badge: 'true', sound: 'true' } }); // 发送本地通知 push.localNotification({ title: '本地通知', message: '通过phonegap-plugin-push发送的本地通知', foreground: true, // iOS前台显示需设为true sound: 'default', data: { key: 'value' } });
注意事项
- 该插件的本地通知功能相对基础,复杂场景(比如定时重复通知、自定义渠道高级配置)不如
cordova-plugin-local-notifications灵活。 - 同样需要确保权限配置正确,iOS的
Info.plist和Android的AndroidManifest.xml权限已添加。
总结
如果需要更强大、灵活的本地通知功能(比如定时、重复、自定义渠道、APP杀死后仍能触发定时通知),优先选择cordova-plugin-local-notifications;如果只是简单的即时本地通知,复用phonegap-plugin-push可以减少插件依赖。
两种方案都能在APP前台、后台状态下正常工作,只要按照上述配置和代码实现即可。
内容的提问来源于stack exchange,提问作者Rodolfo Simoes
相关产品推荐
相关产品推荐

