C'est la première fois que j'utilise FCM.
Je télécharge un échantillon de firebase / quickstart-android et j'installe le FCM Quickstart. Mais je ne peux pas obtenir de jeton du journal, même appuyez sur le bouton LOG TOKEN dans l'application.
Ensuite, j'essaie d'envoyer un message avec la console Firebase et de définir le ciblage du nom de mon package d'application. J'ai reçu des messages entrants.
Je veux savoir si FCM peut être utilisé? GCM tout est ok.
Solution:
Parce que je ne suis pas un développeur Android, juste un développeur backend. Il me faut donc un certain temps pour le résoudre. À mon avis, il y a quelques bugs dans l'exemple d'application.
Code:
RegistrationIntentService.java
public class RegistrationIntentService extends IntentService {
private static final String TAG = "RegIntentService";
public RegistrationIntentService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
String token = FirebaseInstanceId.getInstance().getToken();
Log.i(TAG, "FCM Registration Token: " + token);
}
}
MyFirebaseInstanceIDService.java
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is called when the InstanceID token
* is initially generated so this is where you would retrieve the token.
*/
// [START refresh_token]
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
// String refreshedToken = FirebaseInstanceId.getInstance().getToken();
// Log.d(TAG, "Refreshed token: " + refreshedToken);
//
// // TODO: Implement this method to send any registration to your app's servers.
// sendRegistrationToServer(refreshedToken);
//
Intent intent = new Intent(this, RegistrationIntentService.class);
startService(intent);
}
// [END refresh_token]
/**
* Persist token to third-party servers.
* <p>
* Modify this method to associate the user's FCM InstanceID token with any server-side account
* maintained by your application.
*
* @param token The new token.
*/
private void sendRegistrationToServer(String token) {
// Add custom implementation, as needed.
}
}
Ajoutez ceci dans le fichier MainActivity.java.
Intent intent = new Intent(this, RegistrationIntentService.class);
startService(intent);
Après avoir fait ci-dessus, vous obtenez le jeton dans Logcat. Mais finalement, je trouve un moyen pratique de l'obtenir. Utilisez simplement le mode débogage pour installer l'exemple d'application et vous pourrez obtenir le jeton lors de la première installation.
Mais je ne sais pas pourquoi il ne peut pas imprimer le journal lorsque je l'installe. Peut-être être lié au système mobile.
Et puis pourquoi je ne peux pas obtenir la notification. FirebaseMessagingService.onMessageReceived n'a pas appelé sendNotification
String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken);
Réponses:
PLUS RAPIDE ET BON POUR LE PROTOTYPE
La solution rapide consiste à le stocker dans sharedPrefs et à ajouter cette logique à la
onCreate
méthode de votre MainActivity ou de la classe qui étend Application.UNE MANIÈRE PLUS PROPRE
Une meilleure option consiste à créer un service et à conserver une logique similaire. Commencez par créer un nouveau service
Et puis ajoutez-le au fichier AndroidManifest
Enfin, vous pouvez utiliser une méthode statique de votre service
MyFirebaseMessagingService.getToken(Context);
LE PLUS RAPIDE MAIS DÉPRECÉ
Cela fonctionne toujours lorsque vous utilisez une bibliothèque Firebase plus ancienne que la version 17.xx
la source
FirebaseInstanceId.getInstance().getInstanceId()
place deFirebaseInstanceId.getInstance().getToken()
, voir cette réponseUne information important.
Si le service de lecture fonctionne correctement, la
FirebaseInstanceId.getInstance().getToken()
méthode retournetoken
la source
L'équipe derrière Firebase Android SDK change un peu l'API. J'ai implémenté la logique «Token to Server» comme ceci:
Dans mon instance de FirebaseMessagingService:
Gardez à l'esprit que le jeton est par appareil et qu'il peut être mis à jour par Firebase quelle que soit votre logique de connexion. Donc, si vous avez la fonctionnalité de connexion et de déconnexion, vous devez prendre en compte des cas supplémentaires:
En utilisant la nouvelle API, vous pouvez obtenir un jeton comme celui-ci:
Bonne chance!
la source
Selon doc
Migrer une application client GCM vers FCM
Ainsi, il n'appellera que la première fois lorsque vous installez une application sur votre appareil.
Je suggère donc de désinstaller manuellement votre application et d'essayer de l'exécuter à nouveau
certainement vous obtiendrez TOKEN
la source
String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken);
onTokenRefresh
ne pas appeler chaque connexion. comment puis-je obtenir un jeton dans mon écran de connexion?Essaye ça. Pourquoi utilisez-vous
RegistrationIntentService
?la source
Cette ligne devrait vous procurer le jeton FCM Firebase.
Faites Log.d pour l'imprimer sur le moniteur Android.
la source
Au lieu de cela:
Faites ceci:
Et encore une chose:
METTRE À JOUR:
Un nouveau jeton Firebase est généré (
onTokenRefresh()
est appelé) lorsque:la source
FirebaseInstanceId.getInstance().deleteInstanceId()
dans un autre fil de discussionEn même temps, n'oubliez pas de l'inclure dans votre fichier manifeste pour recevoir l'identifiant du jeton
la source
Dans
firebase-messaging:17.1.0
et plus récent le FirebaseInstanceIdService est obsolète, vous pouvez obtenir leonNewToken
sur laFirebaseMessagingService
classe comme expliqué sur https://stackoverflow.com/a/51475096/1351469Mais si vous voulez simplement obtenir le jeton à tout moment, vous pouvez maintenant le faire comme ceci:
la source
La méthode
getToken()
est obsolète. Vous pouvez utiliser à lagetInstanceId()
place.Si vous souhaitez gérer les résultats lors de la demande
instanceId(token)
, vérifiez ce code.la source
Si vous utilisez une fonction d'authentification de Firebase, vous pouvez prendre un jeton en utilisant ceci:
Fonctionne bien si l'utilisateur est connecté. getCurrentUser ()
la source
essaye ça
la source
pour ceux qui atterrissent ici, jusqu'à présent
FirebaseInstanceIdService
est obsolète maintenant, utilisez à la place:et déclarer dans AndroidManifest
la source
la source
Vous pouvez utiliser les éléments suivants dans Firebase (FCM) pour obtenir le jeton:
la source
la source