从Phonegap版OneSignal获取additionalData遇阻,官方文档不清晰
搞定OneSignal Cordova SDK的通知标题获取问题
兄弟,我太懂这种查官方文档越看越懵、折腾半天连个通知标题都拿不到的憋屈了!我帮你梳理下可能的问题和解决步骤,应该能帮你搞定。
先补全并修正你的代码
你的代码片段截断了,首先得确保OneSignal的初始化流程完整,而且标题的获取路径要对应正确的SDK返回结构。试试下面的完整代码:
document.addEventListener('deviceready', function () { // 开启调试日志(你已经加了,这步很重要,能帮你排查问题) window.plugins.OneSignal.setLogLevel({logLevel: 4, visualLevel: 4}); // 第一步:用你的OneSignal APP ID初始化(必须填对!) window.plugins.OneSignal.initialize("你的OneSignal应用ID", { kOSSettingsKeyAutoPrompt: true // iOS自动请求通知权限,Android默认会请求 }); // 监听通知被打开的事件 const handleNotificationOpened = (jsonData) => { console.log('通知打开回调数据:', jsonData); // 先在控制台打印完整数据,方便排查 // 正确获取标题:不同SDK版本路径可能略有差异,先看控制台的结构 const title = jsonData.notification?.title || jsonData.notification?.payload?.title; alert('通知标题: ' + (title || '未获取到标题')); }; // 监听通知被收到的事件(如果需要在通知到达时就获取标题) const handleNotificationReceived = (notification) => { console.log('收到通知:', notification); const receivedTitle = notification?.title || notification?.payload?.title; alert('收到通知标题: ' + (receivedTitle || '未获取到标题')); }; // 注册事件监听 window.plugins.OneSignal.addEventListener('notificationOpened', handleNotificationOpened); window.plugins.OneSignal.addEventListener('received', handleNotificationReceived); });
关键排查步骤
- 核对APP ID:初始化时填的必须是你在OneSignal后台创建的对应平台(Android/iOS)的APP ID,填错了直接全白搭。
- 确认通知权限:调用
window.plugins.OneSignal.getPermissionSubscriptionState((status) => console.log(status)),在控制台看permissionStatus.authorized是否为true,如果是false,说明用户没允许通知权限。 - 看调试日志:你已经开了最高级别的日志,在Chrome DevTools(Android)或者Safari(iOS)的控制台里搜OneSignal的日志,有没有初始化失败、订阅失败的报错信息。
- 确认回调数据结构:不要硬猜字段路径!先在回调里
console.log(jsonData),然后在控制台展开看具体的字段,比如有些版本标题在jsonData.notification.title,有些可能在jsonData.payload.title,根据实际结构调整。
测试小技巧
- 用OneSignal后台发送测试通知,通过
getPermissionSubscriptionState返回的userId定位你的测试设备。 - 先测试
received事件,确认设备能收到通知,再测试notificationOpened事件。 - 如果还是没反应,卸载APP重新安装,确保权限请求弹窗被允许。
内容的提问来源于stack exchange,提问作者Jean R.
相关产品推荐
相关产品推荐

