Dans la nouvelle Firebase, sous Notification, ils ont mentionné que le développeur peut envoyer une notification à un périphérique particulier. Pour cela, dans la console, il demande un jeton FCM. De quoi s'agit-il exactement et comment puis-je obtenir ce jeton?
De quoi s'agit-il exactement?
Un jeton FCM, ou plus communément appelé registrationToken
comme dans google-cloud-messaging . Comme décrit dans le GCM Documents FCM :
Un ID émis par les serveurs de connexion GCM à l'application cliente qui lui permet de recevoir des messages. Notez que les jetons d'inscription doivent être gardés secrets.
Comment puis-je obtenir ce jeton?
Mise à jour : le jeton peut toujours être récupéré en appelant getToken()
. Toutefois, conformément à la dernière version de FCM, la FirebaseInstanceIdService.onTokenRefresh()
a été remplacée par FirebaseMessagingService.onNewToken()
- ce qui dans mon expérience fonctionne de la même manière que onTokenRefresh()
l'a fait .
Ancienne réponse:
Selon le documents FCM :
Lors du démarrage initial de votre application, le SDK FCM génère un jeton d'enregistrement pour l'instance de l'application client. Si vous souhaitez cibler des périphériques uniques ou créer des groupes de périphériques, vous devez accéder à ce jeton.
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 de 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); }
OnTokenRefreshcallback se déclenche chaque fois qu'un nouveau jeton est généré. Par conséquent, l'appel de getToken dans son contexte garantit que vous accédez à un jeton d'enregistrement actuel et disponible. FirebaseInstanceID.getToken () renvoie la valeur null si le jeton n'a pas encore été généré.
Une fois que vous avez obtenu le jeton, vous pouvez l'envoyer à votre serveur d'applications et le stocker en utilisant votre méthode préférée. Voir la référence de l'API ID d'instance pour plus de détails sur l'API.
Voici les étapes simples ajouter ce grade:
dependencies {
compile "com.google.firebase:firebase-messaging:9.0.0"
}
Aucune autorisation supplémentaire n'est nécessaire dans un manifeste comme GCM. Aucun destinataire n'est nécessaire pour se manifester comme GCM. Avec FCM, com.google.Android.gms.gcm.GcmReceiver
est ajouté automatiquement.
Migrez votre service d'écoute
Un service d'extension InstanceIDListenerService
n'est désormais requis que si vous souhaitez accéder au jeton FCM.
Cela est nécessaire si vous voulez
Ajouter un 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>
Modifiez MyInstanceIDListenerService
pour étendre FirebaseInstanceIdService
, et mettez à jour le code pour écouter les mises à jour de jeton et obtenez le jeton à chaque fois qu'un nouveau jeton 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'informations, visitez
FirebaseInstanceIdService est maintenant obsolète. vous devez obtenir le jeton dans la méthode onNewToken dans FirebaseMessagingService.
J'ai une mise à jour sur "le jeton de Firebase Cloud Messaging" pour laquelle je pourrais obtenir une information.
Je voulais vraiment être au courant de ce changement, alors envoyez un courrier à l'équipe de support. Le jeton Firebase Cloud Messaging sera bientôt de nouveau associé à la clé de serveur. Il n'y aura rien à changer. Nous pouvons voir la clé de serveur à nouveau après bientôt.
Ils ont déconseillé la méthode getToken () dans les notes de publication ci-dessous. Au lieu de cela, nous devons utiliser getInstanceId.
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 les succès et les échecs dans le même écouteur, associez un fichier 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();
}
}
});
De plus, la classe FirebaseInstanceIdService est obsolète et la méthode onNewToken a été trouvée dans FireBaseMessagingService en remplacement de onTokenRefresh,
vous pouvez consulter les notes de publication 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);
}