Invoco el método sendToDevice de Firebase Cloud Messaging (FCM) en Cloud Function (Node Js).
Paso los parámetros del token con múltiples tokens como [token1, token2, ... ]
Luego recibí una response de tipo MessagingDevicesResponse .
El código es así:
//Array of Strings. token1-3 are strings const tokens = [token1, token2, token3]; await admin .messaging() .sendToDevice(tokens, payload) .then((response) => { // response is type MessagingDevicesResponse for (let i = 0; i < response.results.length; i++) { const res = response.results[i]; if(res.error) { //* If error found on index i //*** Do something to delete the non-registered token } } return { success: true }; }) .catch((error) => { console.error( `Error while sending notification. Code: ${error.code}, Error: ${error}`); return { error: error }; }); Ahora, como puede ver, la variable tokens es una matriz de cadenas. En consecuencia, response.results también devuelve la misma longitud que tokens . Pero la pregunta es, ¿los índices en response.results se asignan al mismo índice que los tokens ?
Quiero decir, ¿ response.results[0] significa que es el resultado de enviar una notificación al dispositivo con el token en tokens[0] , y así sucesivamente?
Gracias
Sí, los elementos de la matriz response.results se enumeran en el mismo orden que en la matriz de tokens .
Esto fue documentado previamente y aparentemente ha sido eliminado. Consulte el último comentario de este hilo de GitHub Issue .
Mire también esta muestra de Cloud Function , que hace exactamente lo que está buscando (es decir, elimina los tokens no registrados)
Mejor valide todos los tokens de registro y luego elimine los no válidos, antes de enviarlos. Uno puede publicar fragmentos de 500 tokens de registro cada uno y los "desconocidos" (si los hay) no son realmente "inválidos", pero pertenecen a otro proyecto. En términos generales, esto necesita un poco de limpieza, por ejemplo. recientemente eliminó el 27,5% de los tokens de registro, porque ya no eran válidos.