Expo React Native中APN自定义recordid使用致APP崩溃求助
解决Expo React Native中APN自定义recordid导致崩溃的问题
问题根源
从APN响应结构来看,recordid是和aps同级的顶层字段,而非嵌套在aps内部。你之前的代码错误地从trigger.payload.aps.recordid取值,会因找不到字段引发崩溃。
正确实现方式
- 修正iOS取值路径:直接从
trigger.payload顶层获取recordid,而非aps子节点。 - 添加空值校验:访问字段前先判断是否存在,避免因字段缺失导致崩溃。
修正后的代码示例
notificationListener.current = Notifications.addNotificationReceivedListener(notification => { setNotification(notification); let id = 1; let str = null; alert("notf:: values:" + JSON.stringify(notification)); if (Platform.OS === 'android') { // Android端保留原逻辑,增加空值兜底 id = notification.request.content.data?.recordid || 1; } if (Platform.OS === 'ios') { const trigger = notification.request.trigger; // 直接从payload顶层取recordid,同时做空值处理 id = trigger?.payload?.recordid || 1; } // 后续使用id的业务逻辑 });
额外注意事项
- PHP服务端推送时,确保
recordid是和aps同级的字段,不要嵌套到aps内部,否则APN会过滤自定义字段。 - 始终用可选链
?.和空值合并||处理可能不存在的字段,这是避免RN应用空指针崩溃的核心手段。
内容的提问来源于stack exchange,提问作者satya o
相关产品推荐
相关产品推荐

