You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo React Native中APN自定义recordid使用致APP崩溃求助

解决Expo React Native中APN自定义recordid导致崩溃的问题

问题根源

从APN响应结构来看,recordid是和aps同级的顶层字段,而非嵌套在aps内部。你之前的代码错误地从trigger.payload.aps.recordid取值,会因找不到字段引发崩溃。

正确实现方式

  1. 修正iOS取值路径:直接从trigger.payload顶层获取recordid,而非aps子节点。
  2. 添加空值校验:访问字段前先判断是否存在,避免因字段缺失导致崩溃。

修正后的代码示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:05:26