Estoy enviando una notificación al dispositivo móvil para el que tengo tokens fcm. Al enviar, recibo una respuesta que puede tener un error para cada token fcm. Quiero eliminar los tokens inválidos que seguramente ya no funcionarán, pero conservar los tokens que pueden haber fallado esta vez y aún podrían funcionar en el futuro.
Estoy usando el paquete node-gcm .
¿Cuáles son los valores posibles para el campo de error en la respuesta de cada token? ¿Qué verificaciones de este valor debo hacer para eliminar solo los tokens permanentemente inválidos?
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); } } });Los dos códigos de error más comunes que indican que se debe eliminar el token son messaging/invalid-registration-token y messaging/registration-token-not-registered .
Recomiendo basar su lógica en este código en el repositorio functions-samples .
Recibí una respuesta del propio repositorio.
Recomiendan verificar si el error coincide con 'NotRegistered' .
Modifiqué el código para marcar 'NotRegistered' y '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); } } });Los valores del campo de error coinciden con la columna Código HTTP de este enlace:
https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes
ejemplos: InvalidRegistration , NotRegistered , MessageTooBig , Unavailable , etc.
Problema y respuesta en el repositorio https://github.com/ToothlessGear/node-gcm/issues/360