Удаление более недействительных токенов 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);
}
}
});
2 ответа
Я получил ответ от самого репо.
Они рекомендуют проверить, соответствует ли ошибка .
Я изменил код, чтобы проверить
'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
Два наиболее распространенных кода ошибки, указывающие на необходимость удаления маркера:
messaging/invalid-registration-token
а также
messaging/registration-token-not-registered
.
Я рекомендую основывать вашу логику на этом коде в репозитории functions-samples .