迁移至FCM API(V1)后旧安装应用推送报Requested entity was not found求助
解决FCM V1迁移后旧应用推送报错问题
问题根源
旧应用的FCM注册令牌是基于Legacy API生成的,node-pushnotifications v3默认使用V1 API发送时,无法正确处理这类旧令牌,导致返回Requested entity was not found.错误;新安装应用生成的令牌适配V1 API标准,因此能正常接收推送。
具体解决方案
保留Legacy API配置,兼容旧令牌
在node-pushnotifications v3的初始化配置中,同时配置V1服务账号和Legacy服务器密钥,让客户端自动匹配合适的API处理不同令牌:const PushNotifications = require('node-pushnotifications'); const pushSettings = { fcm: { serviceAccount: require('./firebase-service-account.json'), // V1 API服务账号文件 apiKey: 'YOUR_FCM_LEGACY_SERVER_KEY' // Legacy API服务器密钥,从Firebase控制台获取 } }; const pushClient = new PushNotifications(pushSettings);手动区分令牌发送逻辑(可选)
如果自动路由不生效,可根据令牌存储时间(迁移前生成的为旧令牌),分别指定API版本发送:// 示例:拆分新旧令牌集合 const legacyTokens = ['旧令牌1', '旧令牌2']; const v1Tokens = ['新令牌1', '新令牌2']; // 针对旧令牌使用Legacy API发送 pushClient.send(legacyTokens, { title: '通知标题', body: '通知内容' }, { fcm: { apiVersion: 'legacy' } }); // 针对新令牌使用V1 API发送 pushClient.send(v1Tokens, { title: '通知标题', body: '通知内容' }, { fcm: { apiVersion: 'v1' } });临时开启Legacy API支持
登录Firebase控制台 → 进入对应项目 → 「项目设置」→ 「云消息传递」→ 找到「Cloud Messaging API (Legacy)」,确保其状态为启用(待所有旧令牌完成自动刷新后,再关闭Legacy API)。推动旧令牌自动更新
应用端FCM SDK会在令牌失效时自动刷新,只要后端有接收应用上报新令牌的逻辑,旧令牌会逐步被替换。可在后端检测到Requested entity was not found.错误时,标记对应令牌为失效,后续推送时跳过。
内容的提问来源于stack exchange,提问作者arnaudambro
相关产品推荐
相关产品推荐

