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
},
我在使用多播时遇到一些令牌错误,但不知道如何知道错误与哪个令牌有关。
消息在 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
},