Je migre mon application de GCM vers FCM.
Lorsqu'un nouvel utilisateur installe mon application, le onTokenRefresh()
est automatiquement appelé. Le problème est que l'utilisateur n'est pas encore connecté (pas d'ID utilisateur).
Comment puis-je déclencher le onTokenRefresh()
après la connexion de l'utilisateur?
android
firebase-cloud-messaging
TareK Khoury
la source
la source
Réponses:
La
onTokenRefresh()
méthode sera appelée chaque fois qu'un nouveau jeton est généré. Lors de l'installation de l'application, elle sera générée immédiatement (comme vous l'avez constaté). Il sera également appelé lorsque le jeton aura changé.D'après le
FirebaseCloudMessaging
guide:Cela signifie que l'enregistrement du jeton se fait par application. Il semble que vous souhaitiez utiliser le jeton après la connexion d'un utilisateur. Ce que je suggérerais, c'est que vous enregistriez le jeton dans la
onTokenRefresh()
méthode dans le stockage interne ou dans les préférences partagées. Ensuite, récupérez le jeton du stockage une fois qu'un utilisateur s'est connecté et enregistrez le jeton auprès de votre serveur si nécessaire.Si vous souhaitez forcer manuellement le
onTokenRefresh()
, vous pouvez créer un IntentService et supprimer l'instance de jeton. Ensuite, lorsque vous appelez getToken, laonTokenRefresh()
méthode sera à nouveau appelée.Exemple de code:
ÉDITER
onTokenRefresh () est obsolète . Utiliser
onNewToken()
dansMyFirebaseMessagingService
la source
Essayez de mettre en œuvre
FirebaseInstanceIdService
pour obtenir un jeton d'actualisation.Accédez au jeton d'inscription:
Vous pouvez accéder à la valeur du jeton en étendant FirebaseInstanceIdService . Assurez-vous que vous avez ajouté le service à votre manifeste , puis appelez
getToken
dans le contexte deonTokenRefresh
et enregistrez la valeur comme indiqué:Code complet:
Voir ma réponse ici .
MODIFIER:
Vous ne devriez pas démarrer vous-même un FirebaseInstanceIdService .
Cela ne sera pas appelé très fréquemment, il est nécessaire pour la rotation des clés et pour gérer les changements d'ID d'instance en raison de:
Le système limitera l'événement d'actualisation sur tous les appareils pour éviter de surcharger les serveurs d'applications avec des mises à jour de jetons.
Essayez ci-dessous :
la source
onTokenRefresh()
appelé?Je maintiens un indicateur dans la préférence partagée qui indique si le jeton gcm est envoyé au serveur ou non. Dans l'écran Splash chaque fois que j'appelle une méthode sendDevicetokenToServer. Cette méthode vérifie si l'ID utilisateur n'est pas vide et l'état d'envoi de gcm, puis envoie le jeton au serveur.
}
Dans la classe MyFirebaseInstanceIDService
la source
Les gars, il a une solution très simple
https://developers.google.com/instance-id/guides/android-implementation#generate_a_token
Remarque: Si votre application a utilisé des jetons supprimés par deleteInstanceID, votre application devra générer des jetons de remplacement.
Au lieu de supprimer l'ID d'instance, supprimez uniquement le jeton:
la source
Ceci est dans RxJava2 dans le scénario lorsqu'un utilisateur se déconnecte de votre application et que d'autres utilisateurs se connectent (même application) login api)
S'identifier
la source
Cette réponse ne détruit pas l'identifiant de l'instance, mais peut en obtenir le courant. Il stocke également une actualisée dans les préférences partagées.
Strings.xml
Utility.java (toute classe dans laquelle vous souhaitez définir / obtenir des préférences)
MyFirebaseInstanceIdService.java (étend FirebaseInstanceIdService)
}
Android 2.0 et supérieur
onCreate
du service n'est pas appelé lors du démarrage automatique ( source ). Au lieu de cela, ilonStartCommand
est remplacé et utilisé. Mais dans FirebaseInstanceIdService, il est déclaré comme final et ne peut pas être remplacé. Cependant, lorsque nous démarrons le service en utilisant startService (), si le service est déjà en cours d'exécution, son instance d'origine est utilisée (ce qui est bien). Notre onCreate () (défini ci-dessus) a également été appelé !.Utilisez ceci au début de MainActivity ou à tout moment où vous pensez avoir besoin de l'identifiant d'instance.
Et enfin,
Notez que vous pouvez encore améliorer cela en essayant de déplacer le code startservice () vers la méthode getFirebaseInstanceId.
la source
la source
La nouvelle façon de procéder serait de remplacer la
onNewToken
méthode deFirebaseMessagingService
N'oubliez pas non plus d'ajouter le service dans le fichier Manifest.xml
la source
Comment je mets à jour mon appareil
Tout d'abord, lorsque je me connecte, j'envoie le premier jeton d'appareil sous la collection d'utilisateurs et l'utilisateur actuellement connecté.
Après cela, je remplace simplement
onNewToken(token:String)
dans myFirebaseMessagingService()
et je mets simplement à jour cette valeur si un nouveau jeton est généré pour cet utilisateurChaque fois que votre application s'ouvre, elle recherchera un nouveau jeton, si l'utilisateur n'est pas encore connecté, elle ne mettra pas à jour le jeton, si l'utilisateur est déjà connecté, vous pouvez vérifier un
newToken
la source