Firebase 云消息多播错误 messaging/registration-token-not-registered

Firebase cloud messaging multicast error messaging/registration-token-not-registered

我在使用多播时遇到一些令牌错误,但不知道如何知道错误与哪个令牌有关。

消息在 nodejs 中使用 firebase admin sdk 发送,其中 tokenChunk 是一个 FCM 令牌数组:

firebaseAdmin.messaging().sendMulticast({
                    notification: {
                        title: title,
                        body: message,
                    },
                    data: data,
                    tokens: tokenChunk,
                })
                .then((success) => {
                    if (success.responses) {
                        success.responses.forEach((response) => {
                            if (response.error) {
                                if (response.error?.errorInfo?.code === 'messaging/registration-token-not-registered') {
                                    // there is no token reference in this entire response to know which one to delete, only the error
                                }
                            }
                        });
                    }
                    return success;
                })

错误看起来像这样:

FirebaseMessagingError: Requested entity was not found.
      at FirebaseMessagingError.FirebaseError [as constructor] (/var/task/node_modules/firebase-admin/lib/utils/error.js:44:28)
      at FirebaseMessagingError.PrefixedFirebaseError [as constructor] (/var/task/node_modules/firebase-admin/lib/utils/error.js:90:28)
      at new FirebaseMessagingError (/var/task/node_modules/firebase-admin/lib/utils/error.js:279:16)
      at Function.FirebaseMessagingError.fromServerError (/var/task/node_modules/firebase-admin/lib/utils/error.js:312:16)
      at Object.createFirebaseError (/var/task/node_modules/firebase-admin/lib/messaging/messaging-errors-internal.js:35:47)
      at FirebaseMessagingRequestHandler.buildSendResponse (/var/task/node_modules/firebase-admin/lib/messaging/messaging-api-request-internal.js:122:56)
      at /var/task/node_modules/firebase-admin/lib/messaging/messaging-api-request-internal.js:97:30
      at Array.map (<anonymous>)
      at /var/task/node_modules/firebase-admin/lib/messaging/messaging-api-request-internal.js:96:30
      at processTicksAndRejections (internal/process/task_queues.js:95:5) {
    errorInfo: {
      code: 'messaging/registration-token-not-registered',
      message: 'Requested entity was not found.'
    },
    codePrefix: 'messaging'
  }

他们应该只按照响应的顺序匹配吗?因此,如果 success.responses[4] 出现错误,则令牌将为 tokenChunk[4]?

我开始在多播响应中的同一索引处记录错误和令牌,在手动检查每个令牌后,它似乎不再 registered/erroring 与同一索引处的令牌。

所以确认一下,来自 sendMulticast 的响应数组与传入的令牌的顺序相同,允许您匹配任何错误的索引。

在此示例中,令牌 'def' 是未注册的令牌,因为错误出现在第二个响应项上:

tokens: [
  'abc',
  'def',
  'ghi',
]
...
//send multicast
...
success.responses: [
 {
  //success response
 },
 {
   error: {
     errorInfo: {
       code: 'messaging/registration-token-not-registered',
     },
   },
 },
 {
  //success response
 },