Firebase Cloud Messaging - comment valider des Tokens?

J'utilise Firebase Cloud Messaging (FCM) et selon le code abrégé ci-dessous chaque fois qu'un nouveau Token est généré sur le périphérique client... J'envoie ce nouveau TOKEN à mon serveur DB (Cloud) où je l'enregistre afin de pouvoir envoyer future Notification Push du serveur au périphérique à l'aide de L'API CFM.

    //public class CFMInstanceIDService extends FirebaseInstanceIdService ...

    public void onTokenRefresh() {
        ...
        String cfmToken = FirebaseInstanceId.getInstance().getToken();        
        ...     
        sendRegistrationToServer(customerGuid, cfmToken);
    }

en faisant cela j'ai sur le serveur une liste de tous les périphériques (multiples) où un client est connecté. (Tablette, téléphone, iPhone, Android, etc)

Est-il possible de vérifier/valider un Jeton à tout moment?

je voudrais savoir/s'assurer que tous les jetons que j'ai associé à un Client appartiennent à des Périphériques réels. Je ne veux pas envoyer de notification Push à des Tokens non existants.

15
demandé sur Zon 2016-07-18 20:10:58

4 réponses

rien de tel n'existe, la seule information que vous pouvez obtenir à partir d'un token est l'information app et pas si elle est valide ou pas

https://developers.google.com/instance-id/reference/server#get_information_about_app_instances

ce que vous devez faire est de surveiller la réponse lorsque vous allez envoyer des push et si les clés ne sont plus valides la réponse vous dira quelles clés doivent être supprimées NotRegistered

https://firebase.google.com/docs/cloud-messaging/server

6
répondu tyczj 2016-12-29 09:04:44

voici un exemple de requête curl qui montre comment valider un token sans avoir à envoyer de message:

curl -H "Content-Type: application/json" -H "Authorization: key=$FCM_API_KEY" https://fcm.googleapis.com/fcm/send -d '{"registration_ids":["$FCMTOKEN"]}'

Exemple de réponse non valide:

{"multicast_id":7452350602151058088,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}

Exemple de réponse valide:

{"multicast_id":9133870199216310277,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1502817580237626%f590ddc2f9fd7ecd"}]}

j'ai eu cette réponse de l'équipe de support de la base de feu de google.

5
répondu AngularNerd 2017-08-15 17:17:41

Il n'y a aucun moyen de valider si un jeton est toujours valide avant d'envoyer l'aval message. Ce que vous devez faire est de vérifier la réponse après avoir envoyé le message et ensuite vérifier si la réponse contient une erreur.

Par exemple, si le serveur renvoie un 200 + error:NotRegistered code http, cela signifie qu'un enregistrement existant jeton peut cesser d'être valide.

Dans la section "messages en aval codes d'erreur de réponse de la CGF", vous trouverez documenté chaque réponse possible du statut.

2
répondu Víctor Albertos 2016-07-18 17:48:06

en fait il y a une solution, vous pouvez utiliser dry_run = true

ce paramètre, lorsqu'il est défini à true, permet aux développeurs de tester une requête sans envoyer de message.

firebase docs

si l'utilisateur se désabonner, vous avez une réponse NotRegistered mais réel de l'envoi ne sera pas exécuté

1
répondu FDG 2018-03-30 14:39:52