web-dev-qa-db-fra.com

Messagerie cloud Firebase - Comment valider les jetons?

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 l'appareil client ... J'envoie ce nouveau TOKEN à ma SERVER DB (Cloud) où je l'enregistre afin de pouvoir pour envoyer à l'avenir Push Notification 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 (multiples) appareils sur lesquels un client est connecté. (Tablette, téléphone, iPhone, Android, etc.)

Existe-t-il un moyen de vérifier/valider un jeton à tout moment?

Je voudrais savoir/m'assurer que tous les jetons que j'ai associés à un client appartiennent à de vrais appareils. Je ne veux pas envoyer de notifications push à des jetons non existants.

19
G305

Voici un exemple de requête curl qui montre comment valider un jeton 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 reçu cette réponse de l'équipe d'assistance Google Firebase.

11
AngularNerd

Rien de tel n'existe, les seules informations que vous pouvez obtenir à partir d'un jeton sont des informations d'application et non si elles sont valides ou non

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

ce que vous devriez faire, c'est de regarder la réponse lorsque vous allez envoyer des push et si les clés ne sont plus valides, la réponse vous indiquera quelles clés doivent être supprimées avec NotRegistered

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

6
tyczj

En fait, il existe une solution de contournement, vous pouvez utiliser dry_run = true

Ce paramètre, lorsqu'il est défini sur true, permet aux développeurs de tester une demande sans réellement envoyer de message.

documents Firebase

si l'utilisateur se désabonne, vous avez une réponse avec NotRegistered mais l'envoi réel ne sera pas effectué

4
FDG

Il n'y a aucun moyen de valider si un jeton est toujours valide avant d'envoyer le message en aval. Ce que vous devez faire est de vérifier la réponse après l'envoi du message, puis de 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 jeton d'enregistrement existant peut cesser d'être valide.

Dans la section " Codes de réponse d'erreur de message en aval de FGC ", vous trouverez toutes les réponses d'état possibles documentées.

2
Víctor Albertos