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

问题描述

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

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

然后我收到了一个response类型MessagingDevicesResponse

代码是这样的:

//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],等等?

谢谢

标签: javascriptnode.jsfirebasegoogle-cloud-functionsfirebase-cloud-messaging

解决方案


是的,Array 中的元素按与response.resultsArray 中相同的顺序列出tokens

这是以前记录的,显然它已被删除。请参阅此 GitHub问题线程的最后一条评论。

另请查看此Cloud Function 示例,它完全符合您的要求(即删除未注册的令牌)


推荐阅读