Ionic 5+Capacitor 3应用使用OneSignal时前台通知不显示
你遇到的问题本质是onesignal-cordova-plugin已经默认接管了iOS端UNUserNotificationCenter的代理实现,你自己手动添加的代理方法会被插件的配置覆盖,所以永远不会触发。不需要自己在原生层实现该协议,直接用OneSignal提供的前端API配置前台通知展示逻辑即可。
解决步骤
1. 删除原生层自定义的UNUserNotificationCenterDelegate实现
你自行添加的userNotificationCenter相关原生代码可以直接删除,OneSignal插件初始化时会自动注册对应的代理,手动添加的代码会和插件逻辑冲突,导致无法正常触发回调。
2. 在Ionic前端代码中添加前台通知展示配置
在你项目初始化OneSignal的位置(一般是app.component.ts的初始化逻辑中),添加如下代码即可实现前台接收展示通知:
// 初始化OneSignal后添加该配置 OneSignal.setNotificationWillShowInForegroundHandler(notificationReceivedEvent => { // 如需修改通知内容可以在这里调整,直接调用complete即可在前台展示通知 notificationReceivedEvent.complete(notificationReceivedEvent.getNotification()); });
3. 验证配置是否生效
重新同步Capacitor iOS项目:
npx cap sync ios
之后运行项目测试前台推送接收逻辑即可正常生效。
注意事项
- 不要在原生
AppDelegate中手动给UNUserNotificationCenter.current().delegate赋值,该操作会覆盖OneSignal插件的代理注册逻辑,导致推送回调异常 - 确保你已经给应用开启了通知权限,OneSignal初始化时会主动申请权限,也可以自行调用权限申请接口提前触发申请
内容的提问来源于stack exchange,提问作者James Parker
相关产品推荐
相关产品推荐

