如何在Ionic Cordova应用中获取OneSignal推送的自定义附加数据
获取OneSignal推送中的自定义data字段
我来帮你搞定这个问题!首先要明确一个关键点:你后端PHP代码里fields数组中的data字段,在Ionic Cordova的OneSignal回调里,直接对应jsonData.payload.additionalData这个对象本身,不需要再加feilds这类额外的前缀——你之前试的jsonData.payload.additionalData.feilds是错误的,因为feilds只是你后端自己在返回响应里加的字段,根本不会被推送到客户端。
正确的获取步骤:
- 先确认
additionalData的完整结构:
你可以先在回调里打印整个additionalData的内容,这样就能清楚看到里面的属性名,避免拼写错误或者结构不匹配的问题:this.oneSignal.handleNotificationReceived().subscribe((jsonData) => { if(jsonData.payload.additionalData) { // 先打印完整的additionalData,查看内部结构 console.log("完整的自定义数据:", JSON.stringify(jsonData.payload.additionalData)); // 后续业务操作... } }); - 根据后端
$received的结构获取对应字段:
假设你的$received是一个类似这样的关联数组:
那在客户端里直接通过$received = array('current' => '这是要推送的自定义内容');jsonData.payload.additionalData.current就能拿到对应的值:this.oneSignal.handleNotificationReceived().subscribe((jsonData) => { if(jsonData.payload.additionalData) { // 获取自定义的current字段 const currentData = jsonData.payload.additionalData.current; this.myService.NotirefreshData(currentData); this.storage.set('current', JSON.stringify(currentData)); this.presentAlert('From Server', currentData); // 其他存储或业务操作... } });
可能的坑点:
- 注意后端拼写错误:你后端代码里写了
$response['feilds'](正确拼写是fields),不过这个不影响推送,因为实际推送用的是$fields变量,所以不用修改这个。 - 确保
$received是合法的关联数组:如果$received是多维数组或非关联数组,你需要对应调整客户端的字段获取路径。
内容的提问来源于stack exchange,提问作者Shehryar
相关产品推荐
相关产品推荐

