11
votes

Comment lancer le service d'identification FCM uniquement après la déclenchement d'une activité particulière?

suppose que j'ai un loginactivité où l'utilisateur peut vous enregistrer ou se connecter avec les informations d'identification existantes. Je ne veux pas FirebaseInstanceIdService Pour générer un jeton, à moins que l'utilisateur ne soit connecté et MainAlyCity de l'application est lancé.

merci


6 commentaires

Appelez simplement le FirebaseInstuced.getinstance (). GetToken () Dans votre MainActivity 'S Oncreate () . Ou partout où dans l'activité, vous pensez que vous en aurez besoin.


Selon les journaux, mon FirebaseInstantanceIDService génère un jeton sur le démarrage de l'application. Y a-t-il quelque chose que je peux empêcher cela?


Désolé. Je suis un peu confus. Faites-vous référence à FirebaseInstantanceIDService.onkenSrefresh () ?


Ouais, excuses pour ne pas pointer cela


Hmm. OnkyreFresh () TOUJOURS TOUJOURS TOUJOURS LE TRAVAILLEMENT À UN NOUVELLE INSTALLATION (Le jeton précédent est invalidé). Découvrez le DOC pour ce qui déclenche cette .


Merci, mcawesomville.


3 Réponses :


16
votes

Vous ne pouvez pas bloquer firebaseinstanceidService.onkenKeRefresh () d'être appelé jusqu'à ce que l'utilisateur soit connecté.

Ce que vous pourriez faire dans votre cas d'utilisation est le suivant:

  • in firebaseinstanceIdService.onkenKeRefresh () Ignore l'événement si l'utilisateur n'est pas connecté à
  • Lorsque la vérification de la connexion utilisateur FirebaseInstantanceID.getToken () et si ! = NULL appel Onkyrefresh () (ou directement votre logique> (ou directement votre logique ) manuellement.

    De cette façon, vous pouvez traiter le jeton lorsque l'utilisateur est connecté et si le jeton n'est pas disponible (ou est pivoté), vous recevrez l'événement Onkenrefresh () ultérieurement.

    Mise à jour (3 juillet 2017) : Dans les commentaires, un lecteur a rappelé que FirebaseIntantanceidService.onokentrefresh () pourrait être appelé après la connexion de l'utilisateur.

    C'est vrai. Lorsque l'utilisateur se connecte, getToken () pourrait toujours retourner null si Onkyrefresh () n'a pas été appelé plus tôt.

    Vous devez harceler ce cas dans votre application. Très probablement, l'utilisateur peut utiliser l'application quand même, mais vous ne pouvez pas envoyer de notification push avant de recevoir le jeton.

    Lorsque Onkentrefresh () est enfin appelé, si l'utilisateur se connecte avant, que vous pouvez associer le jeton à l'utilisateur.


4 commentaires

Que se passe-t-il si FirebaseInstantanceIDService.onkengefresh () est appelé après que l'utilisateur se connecte est un appel ASYNC?


Cela peut arriver et vous devez gérer l'affaire dans votre application. Très probablement, l'utilisateur peut utiliser l'application quand même, mais vous ne pouvez pas envoyer de notification push avant de recevoir le jeton. Ensuite, lorsque vous recevez le jeton, vous pouvez l'associer à l'utilisateur qui vous connecte. (J'ai aussi mis à jour la réponse)


C'est agréable mais je pense que nous devons supprimer l'instance et rappeler la méthode getinstance () après la connexion au cas où il est appelé avant de faire une nouvelle jeton à partir de l'instance nouvellement générée.


Ça ne devrait pas être nécessaire



3
votes

Désolé mais ce n'est pas possible. FireBaseInstantanceIDService Appelez automatiquement sur le démarrage de l'application et générez un jeton . N'oubliez pas que sa relation avec application instance . Pas avec l'un utilisateur particulier. Si vous essayez d'enregistrer jeton avec un utilisateur particulier (c'est-à-dire lorsque l'utilisateur est connecté, vous enregistrerez ce jeton dans le serveur DB pour la notification push de cet utilisateur) .Si vous Est-ce que cela fait un bug que vous aurez confronté à l'avenir est que si deux partageez une application instance puis appuyez sur la notification Push pour le mauvais utilisateur .. J'espère que vous avez mon point.


5 commentaires

Salut USMAL. Comment résoudre ce problème? Peut-être supprimer une association de jetons de l'utilisateur déconnecté sur mon serveur et l'ajouter à l'utilisateur nouvellement connecté ... que pensez-vous?


@Alessandro oui j'ai eu un problème ..J'ai fait ce que tu mentionnes


Merci, je fais la même chose! :)


@usmanlqbal j'ai un problème..je veux obtenir une pièce d'identité FCM à l'écran de Splash..mais le problème est que mon autre appel d'API d'abord, puis je reçois la FCM ID..Qu'est-ce que c'est le problème


@ ADITYAVYAS-LAKHAN Vous devez faire votre appels d'API dans la méthode FCMService OnkyRefresh ()



0
votes

Je maintient un drapeau dans Pref partagé qui indique si le jeton GCM est envoyé au serveur ou non. Dans l'écran de Splash à chaque fois que j'appelle une méthode SendDeviceTokentoserver. Cette méthode vérifie si l'identifiant de l'utilisateur n'est pas vide et l'état de l'envoi de GCM puis envoyez le jeton au serveur. XXX PRE>

dans la classe MyFireBaseInstanceDService p>

 @Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    Common.saveBooleanPref(this,Constants.isTokenSentToServer,false);
    Common.sendRegistrationToServer(this);

}


0 commentaires