我如何使用FirebaseMessaging的sendToDevice方法的响应来查找给定令牌数组中的哪个索引是错误的?



我在Cloud Function (Node Js)中调用Firebase Cloud Messaging (FCM)的sendToDevice方法。

我用多个令牌传递令牌参数,如[token1, token2, ... ]

然后我收到一个MessagingDevicesResponse型的response

代码如下:

//Array of Strings. token1-3 are strings
const tokens = [token1, token2, token3]; 
await admin
.messaging()
.sendToDevice(tokens, payload)
.then((response) => { // response is type MessagingDevicesResponse
for (let i = 0; i < response.results.length; i++) {
const res = response.results[i];

if(res.error) {
//* If error found on index i
//*** Do something to delete the non-registered token
}
}
return { success: true };
})
.catch((error) => {
console.error(
`Error while sending notification. Code: ${error.code}, Error: ${error}`);
return { error: error };
});

现在,您可以看到tokens变量是一个字符串数组。因此,response.results也返回与tokens相同的长度。但问题是,response.results中的索引是否映射到与tokens相同的索引?

我的意思是,response.results[0]是否意味着它是用tokens[0]中的令牌向设备发送通知的结果,等等?

谢谢

是的,response.results数组中的元素与tokens数组中的元素排列顺序相同。

这是先前记录的,显然它已被删除。查看这个GitHub Issue线程的最后一个注释。

也看一下这个Cloud Function示例,它正是您正在寻找的(即删除未注册的令牌)

最好在发送之前验证所有注册令牌,然后删除无效的令牌。每个人可以发布500个注册令牌和"未知"的区块。它们(如果有的话)并不是真的"无效",而是属于另一个项目。一般来说,这需要一些管理。最近销毁了27.5%的注册令牌,因为它们不再有效。

最新更新