如何通过FirebaseMessaging的sendToDevice返回结果定位错误token索引
结论
是的,MessagingDevicesResponse返回的response.results数组索引和你传入的tokens数组索引严格一一对应,response.results[0]就是tokens[0]对应的推送结果,你示例中的处理逻辑完全符合官方设计规范。
补充说明
- 该顺序映射是Firebase Admin SDK FCM接口的固定设计,不需要额外做顺序校验或映射匹配,直接按索引对应即可。
- 你代码中根据索引删除无效token的逻辑是标准实践:如果
results[i].error返回InvalidRegistration、NotRegistered等标识token无效的错误码,直接清理对应位置的tokens[i]即可。 - 注意
sendToDevice仅在全量请求失败(如鉴权错误、payload格式非法)时才会进入catch分支,部分token推送失败不会触发全局报错,所有单条推送的结果都需要在then的response.results中遍历处理。
代码示例
// 字符串数组,token1-3均为字符串格式的设备token const tokens = [token1, token2, token3]; await admin .messaging() .sendToDevice(tokens, payload) .then((response) => { // response类型为MessagingDevicesResponse for (let i = 0; i < response.results.length; i++) { const res = response.results[i]; if(res.error) { // 若索引i对应的推送结果出错,需删除对应的无效注册token } } return { success: true }; }) .catch((error) => { console.error( `推送通知出错,错误码:${error.code},错误信息:${error}`); return { error: error }; });
内容的提问来源于stack exchange,提问作者Zenko
相关产品推荐
相关产品推荐

