我正在向有fcm令牌的移动设备发送通知。在发送时,我会得到一个响应,可以对每个fcm令牌有一个错误。我希望删除那些无效的令牌,这些令牌肯定将不再工作,但是保留可能已经失败并在将来仍然可以工作的令牌。
我正在使用node-gcm包。
在每个令牌的响应中,error字段的可能值是什么。我应该对这个值进行哪些检查,以便只删除永久无效的令牌?
sender.send(gcmMessage, { registrationTokens: fcmTokens }, (error, response) => {
if (error) {
console.log(error);
} else {
const failedTokens = fcmTokens.filter((_, index) => response.results[index].error != null);
if (failedTokens.length) {
// If there are failed tokens, check these to know whether we should delete them.
this.clearUserFcmTokens(userID, failedTokens);
}
}
});发布于 2022-03-11 06:16:36
我从回购处得到了答案。
他们建议检查错误是否与'NotRegistered'匹配。
我修改了代码以检查'NotRegistered'和'InvalidRegistration'
sender.send(gcmMessage, { registrationTokens: fcmTokens }, (error, response) => {
if (error) {
console.log(error);
} else {
const invalidTokenErrorKeys = ['NotRegistered', 'InvalidRegistration'];
const failedTokens = fcmTokens.filter((_, index) => response.results[index].error != null && invalidTokenErrorKeys.includes(response.results[index].error));
if (failedTokens.length) {
this.clearUserFcmTokens(userID, failedTokens);
}
}
});错误字段的值与此链接中的HTTP列匹配:
https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes
例如:InvalidRegistration、NotRegistered、MessageTooBig、Unavailable等。
回购https://github.com/ToothlessGear/node-gcm/issues/360的问题与对策
https://stackoverflow.com/questions/71433689
复制相似问题