QU'est-ce que le jeton FCM dans Firebase?
5 réponses
Qu'est-ce que c'est exactement?
un jeton FCM, ou plus communément appelé un registrationToken
comme dans google-cloud-messaging . Comme décrit dans le GCM docs :
un ID émis par les serveurs de connexion GCM à l'application client qui lui permet de recevoir des messages. Notez que les jetons d'enregistrement doivent être tenus secrets.
Comment puis-je avoir ce jeton?
Update : le token peut encore être récupéré en appelant getToken()
, cependant, selon la dernière version de FCM, le FirebaseInstanceIdService.onTokenRefresh()
a été remplacé par FirebaseMessagingService.onNewToken()
-- qui, d'après mon expérience, fonctionne de la même manière que onTokenRefresh()
a fait .
ancienne réponse:
conformément au FCM docs :
au démarrage initial de votre application, le SDK FCM génère un token d'enregistrement pour l'instance de l'application client. Si vous voulez cibler des appareils individuels ou créer des groupes de périphériques, vous aurez besoin d'accéder à ce token.
vous pouvez accéder à la valeur du token en étendant FirebaseInstanceIdService. Assurez-vous que vous avez ajouté à votre service manifeste, puis appelez getToken dans le contexte d'onTokenRefresh, et enregistrez la valeur comme indiqué:
@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); }
l'onTokenRefreshcallback démarre chaque fois qu'un nouveau token est généré, donc appeler getToken dans son contexte garantit que vous accédez à un token d'enregistrement disponible. FirebaseInstanceID.getToken () renvoie nul si le token n'a pas encore été généré.
après avoir obtenu le token, vous pouvez l'Envoyer à votre serveur app et conservez-le en utilisant votre méthode préférée. Voir la référence de L'API D'Instance ID pour plus de détails sur L'API.
Voici des étapes simples ajouter ce Grad:
dependencies {
compile "com.google.firebase:firebase-messaging:9.0.0"
}
aucune permission supplémentaire n'est nécessaire dans un manifeste comme GCM.
Aucun récepteur n'est nécessaire pour se manifester comme GCM. Avec FCM, com.google.android.gms.gcm.GcmReceiver
est ajouté automatiquement.
Migrer votre service d'écoute
un service prolongeant InstanceIDListenerService
est maintenant requis seulement si vous voulez accéder au jeton FCM.
cela est nécessaire si vous voulez à
- Gérer les jetons de dispositif pour envoyer directement un message à un seul dispositif, ou Envoyer des messages au groupe de périphériques, ou
- envoyer des messages au groupe de périphériques, ou
- abonnez-vous à des appareils pour des sujets avec L'API de gestion des abonnements du serveur.
ajouter Service dans le manifeste
<service
android:name=".MyInstanceIDListenerService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service
android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
modifier MyInstanceIDListenerService
pour étendre FirebaseInstanceIdService
, et mettre à jour le code pour écouter les mises à jour de token et récupèrent le token chaque fois qu'un nouveau token est généré.
public class MyInstanceIDListenerService extends FirebaseInstanceIdService {
...
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is also called
* when the InstanceID token is initially generated, so this is where
* you 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);
}
}
pour plus d'information, visitez
FirebaseInstanceIdService est maintenant déprécié. vous devriez obtenir le jeton dans la méthode unnewtoken dans le service de gestion de base de feu.
j'ai une mise à jour sur" Firebase Cloud Messaging token " que je pourrais obtenir une information.
je voulais vraiment savoir à propos de ce changement alors j'ai envoyé un mail à L'équipe de soutien. Le jeton de messagerie Cloud Firebase va bientôt revenir à la clé du serveur. Il n'y aura rien à changer. Nous pouvons voir la clé du serveur à nouveau après bientôt.
ils ont déprécié la méthode getToken() dans les notes de version ci-dessous. Au lieu de cela, nous devons utiliser gettinstanceid.
https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId
Task<InstanceIdResult> task = FirebaseInstanceId.getInstance().getInstanceId();
task.addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult authResult) {
// Task completed successfully
// ...
String fcmToken = authResult.getToken();
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
// ...
}
});
Pour gérer le succès et l'échec dans le même auditeur, joindre une OnCompleteListener:
task.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (task.isSuccessful()) {
// Task completed successfully
InstanceIdResult authResult = task.getResult();
String fcmToken = authResult.getToken();
} else {
// Task failed with an exception
Exception exception = task.getException();
}
}
});
aussi, la classe FirebaseInstanceIdService est dépréciée et ils sont venus avec une nouvelle méthode parlée dans FireBaseMessagingService en remplacement de onTokenRefresh,
vous pouvez vous référer aux notes de version ici, https://firebase.google.com/support/release-notes/android
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Use this code logic to send the info to your server.
//sendRegistrationToServer(s);
}