web-dev-qa-db-fra.com

En quelle période le jeton d'application de Firebase change-t-il et comment le gérer?

Je suis nouveau sur firebase Je l’apprends comme un bambin qui apprend à marcher. Jusqu'à présent, j'ai réussi à envoyer un message sur mon propre téléphone à l'aide d'un jeton généré pour mon téléphone par le framework Firebase. Maintenant, voici où cela devient difficile (à mon avis). Il existe une méthode appelée onTokenRefresh() dans le service étendu FirebaseInstanceIdService. Puisqu'il s'appelle refresh , alors je suppose que cela va changer. Je veux savoir quand ce jeton est créé et quand sera-t-il changé?

Et si cela change, supposons que j'envoie un message à un périphérique avec le jeton 'A' qui est hors ligne pour le moment, il sera donc mis en file d'attente. Désormais, lorsque l'appareil se connecte, il "actualise" le jeton sur "B". Le message étant censé être remis au jeton "A", le message ne sera jamais remis. Comment puis-je gérer cette situation?

40
roostaamir

Le jeton est généré, après le lancement initial de l'application, dès que le téléphone peut se connecter aux serveurs de Google. En raison de la connectivité requise, cela peut ne pas se produire immédiatement, mais dans la plupart des cas, cela se produira quelques secondes après que l'utilisateur ait ouvert l'application . Dès que le jeton est généré, la méthode onTokenRefresh() est appelée.

Comme vous l'avez indiqué, le jeton peut changer, auquel cas la méthode onTokenRefresh() sera appelée à nouveau.
L'actualisation est plutôt rare, ne vous attendez pas à le voir souvent.

Lorsque le jeton d'actualisation se produit, tous les messages qui ont été envoyés "avec succès" (l'API vous a renvoyé un identifiant de message) à l'ancien jeton seront remis.

Enfin, même après l’actualisation, l’ancien jeton fonctionnera encore pendant une courte période, afin de permettre à l’application de communiquer le nouveau jeton à son serveur principal.

50
Diego Giorgini

Lors du démarrage initial de votre application, le sdk de FCM génère le jeton d'enregistrement pour l'instance de l'application client. Comme dit plus haut, c’est un événement rare. Pour être précis, le jeton d’enregistrement peut changer lorsque:

  • L'application supprime l'ID d'instance. 
  • L'application est restaurée sur un nouvel appareil
  • L'utilisateur désinstaller/réinstaller l'application
  • L'utilisateur efface les données de l'application.

Instance ID fournit un identifiant unique pour chaque instance de vos applications. Instance ID fournit une API simple pour générer des jetons de sécurité qui autorisent des tiers à accéder aux ressources gérées du serveur côté application. Le serveur Instance ID peut même vous indiquer le est installé a été utilisé pour la dernière fois. Nous pouvons l’utiliser pour décider de conserver les données de l’application ou d’envoyer un message Push afin de reprendre contact avec les utilisateurs.

Chaque fois que le jeton de périphérique est modifié, il est reflété dans la méthode onTokenRefresh (). Pour obtenir le jeton de périphérique lors de sa modification, nous pouvons appeler cette méthode pour obtenir le jeton actualisé.

et pour obtenir le jeton de périphérique à tout moment, nous pouvons utiliser la méthode FirebaseInstanceId.getInstance (). getToken () pour obtenir le jeton de périphérique actuel.Il faut un peu de temps pour obtenir le jeton de périphérique.

Cliquez sur ici pour en savoir plus sur l'accès au jeton d'enregistrement de périphérique. 

21
Prakhar Anand
  • (onTokenRefresh ()} _ et FirebaseInstanceIdService sont obsolètes.
  • Cet appel est également obsolète FirebaseInstanceId.getInstance (). GetToken ()

À la place _, vous devez remplacer onNewToken (chaîne)} dans FirebaseMessagingService Cette méthode est déclenchée lorsque le jeton est modifié. Une fois que vous substituez cette méthode, vous pouvez supprimer en toute sécurité FirebaseInstanceIdService qui contient onTokenRefresh ().

Quand le jeton peut-il changer?

  • L'application supprime l'ID d'instance
  • L'application est restaurée sur un nouvel appareil
  • L'utilisateur désinstalle/réinstalle l'application
  • L'utilisateur efface les données de l'application

Comment récupérer le jeton actuel:

en appelant FirebaseInstanceId.getInstance (). getInstanceId ():

FirebaseInstanceId.getInstance().getInstanceId()
    .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
        @Override
        public void onComplete(@NonNull Task<InstanceIdResult> task) {
            if (!task.isSuccessful()) {
                Log.w(TAG, "getInstanceId failed", task.getException());
                return;
            }

            // Get new Instance ID token
            String token = task.getResult().getToken();

            // Log and toast
            String msg = getString(R.string.msg_token_fmt, token);
            Log.d(TAG, msg);
            Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Pour plus d'informations: https://firebase.google.com/docs/cloud-messaging/Android/client

Pour la gestion des jetons pour un identifiant d'expéditeur spécifique (autre que l'identifiant d'expéditeur par défaut), vérifier ici

0
Islam Assi