我在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%的注册令牌,因为它们不再有效。