从数据库中删除不再有效的FCM令牌



我正在向我有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);
}
}
});

指示应该删除令牌的两个最常见的错误代码是messaging/invalid-registration-tokenmessaging/registration-token-not-registered

我建议您的逻辑基于函数示例repo中的这段代码。

我从repo本身得到了答案。

他们建议检查错误是否与'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-编码

示例:InvalidRegistrationNotRegisteredMessageTooBigUnavailable


回购的发行和响应https://github.com/ToothlessGear/node-gcm/issues/360

相关内容

  • 没有找到相关文章

最新更新