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

使用expo-server-sdk发送推送通知遇DeveloperError问题求助

问题分析与解决方案

错误核心

你的请求在Expo侧生成了状态为ok的ticket,但FCM返回404 Not Found错误,提示DeveloperError,且仅针对特定推送令牌出现该问题——说明Expo接收请求正常,但FCM无法找到该令牌对应的推送目标。

可能原因

  • 推送令牌已失效:Expo.isExpoPushToken仅校验令牌格式,不验证其在FCM/APNs系统中的有效性。当用户卸载应用、清除数据、设备重置,或令牌过期时,FCM会返回404表示目标不存在。
  • 令牌与推送平台不匹配:该令牌可能属于iOS设备,但项目配置错误将其转发到FCM(iOS应走APNs);或令牌为旧版Expo生成,与当前项目推送配置不兼容。
  • FCM临时路由故障:极少数情况下,FCM内部路由问题会导致特定令牌请求返回404,属于临时异常。

解决方案

1. 移除无效令牌

在推送流程中添加receipt处理逻辑,一旦检测到该错误,立即从存储中删除对应令牌:

// 补充receipt获取与处理逻辑
for (const chunk of chunks) {
  const ticketChunk = await expo.sendPushNotificationsAsync(chunk);
  // 提取有效receipt ID
  const receiptIds = ticketChunk
    .filter(ticket => ticket.id)
    .map(ticket => ticket.id);
  if (receiptIds.length === 0) continue;
  
  const receiptChunk = await expo.getPushNotificationReceiptsAsync(receiptIds);
  // 遍历receipt处理错误
  for (const [receiptId, receipt] of Object.entries(receiptChunk)) {
    if (receipt.status === 'error' 
        && receipt.details?.error === 'DeveloperError' 
        && receipt.details?.fcm?.httpStatus === 404) {
      // 根据ticket关联的令牌,从数据库中删除无效条目
      const invalidToken = tokens.find(t => /* 此处补充ticket与token的关联逻辑 */);
      await yourTokenStorage.delete(invalidToken.id);
    }
  }
}

2. 验证令牌平台兼容性

检查令牌前缀:Expo通用令牌为ExponentPushToken[xxx],如果是旧版平台专属令牌,需确认项目推送配置:

  • iOS设备令牌需确保项目已正确配置APNs证书,避免误转发到FCM;
  • 若令牌为用户旧设备生成,直接标记为无效即可。

3. 添加临时重试机制

针对偶发的FCM路由故障,添加单次重试逻辑:

async function sendNotificationChunk(chunk, retries = 1) {
  try {
    return await expo.sendPushNotificationsAsync(chunk);
  } catch (err) {
    if (retries > 0) {
      await new Promise(resolve => setTimeout(resolve, 5000));
      return sendNotificationChunk(chunk, retries - 1);
    }
    throw err;
  }
}

// 替换原发送逻辑
for (const chunk of chunks) {
  const ticketChunk = await sendNotificationChunk(chunk);
  // 后续receipt处理逻辑同上
}

4. 完善推送闭环流程

你当前代码仅发送通知未处理receipt,这会导致无法及时发现令牌失效问题。必须补充receipt的获取与错误处理,才能保证推送系统的健壮性。

内容的提问来源于stack exchange,提问作者Bruno Pinheiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:42:50