从数据库中删除不再有效的 FCM 令牌
Removing no longer valid FCM tokens from a database
我正在向我有 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-token
和 messaging/registration-token-not-registered
。
我建议您的逻辑基于 this code in the functions-samples 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);
}
}
});
错误字段的值与此 link 中的 HTTP 代码列匹配:
https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes
示例:InvalidRegistration
、NotRegistered
、MessageTooBig
、Unavailable
等
关于 repo 的问题和响应 https://github.com/ToothlessGear/node-gcm/issues/360
我正在向我有 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-token
和 messaging/registration-token-not-registered
。
我建议您的逻辑基于 this code in the functions-samples 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);
}
}
});
错误字段的值与此 link 中的 HTTP 代码列匹配:
https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes
示例:InvalidRegistration
、NotRegistered
、MessageTooBig
、Unavailable
等
关于 repo 的问题和响应 https://github.com/ToothlessGear/node-gcm/issues/360