Bon. J'ai donc réussi à faire quelques tests et j'en suis arrivé à la conclusion suivante :
-
deleteToken()
est la contrepartie de getToken(String, String)
mais pas pour getToken()
.
Cela ne fonctionne que si l'ID d'expéditeur que vous transmettez est un ID d'expéditeur différent (pas le même ID que celui que l'on peut voir dans votre google-services.json). Par exemple, si vous voulez autoriser un serveur différent à envoyer des messages à votre application, vous appelez getToken("THEIR_SENDER_ID", "FCM")
pour leur donner autorisation à envoyer à votre application. Cela renverra un jeton d'enregistrement différent qui correspondra uniquement à cet expéditeur spécifique.
À l'avenir, si vous choisissez de supprimer leur autorisation à envoyer à votre application, vous devrez alors faire usage de deleteToken("THEIR_SENDER_ID", "FCM")
. Cela invalidera le jeton correspondant et, lorsque l'expéditeur tentera d'envoyer un message, comme prévu, il recevra un message de type NotRegistered
erreur.
- Pour supprimer le jeton de votre propre expéditeur, il faut utiliser la méthode suivante
deleteInstanceId()
.
Mention spéciale pour cette réponse de @Prince et plus particulièrement l'exemple de code pour m'aider à résoudre ce problème.
Comme @MichałK l'a déjà fait dans son post, après avoir appelé les deleteInstanceId()
, getToken()
doit être appelé afin d'envoyer une demande pour un nouveau jeton. Cependant, il n'est pas nécessaire de l'appeler une deuxième fois. Tant que onTokenRefresh()
onNewToken()
est implémenté, il devrait se déclencher automatiquement en vous fournissant le nouveau jeton.
Pour faire court, deleteInstanceId()
> getToken()
> vérifier onTokenRefresh()
onNewToken()
.
Note : Appel à deleteInstanceId()
ne supprimera pas seulement le jeton pour votre propre application. Il supprimera tous les abonnements aux sujets et tous les autres jetons associés à l'instance de l'application.
Êtes-vous sûr que vous appelez deleteToken()
correctement ? La valeur de l'audience devrait être (comme on peut le voir dans ma réponse que vous avez citée) "définie par l'ID de l'expéditeur du serveur d'applications". Vous passez la valeur getId()
qui n'est pas le même que l'ID de l'expéditeur (il contient la valeur de l'ID de l'instance de l'application). De plus, comment envoyez-vous le message (App Server ou Console de Notifications) ?
getToken()
y getToken(String, String)
renvoie des jetons différents. Voir ma réponse aquí .
J'ai aussi essayé FirebaseInstanceId.getInstance().deleteInstanceId()
mais la fois suivante, j'appelle FirebaseInstanceId.getInstance.getToken
Je reçois null (cela fonctionne au deuxième essai).
C'est probablement parce que la première fois que vous appelez la fonction getToken()
il est toujours généré. C'est juste le comportement prévu.
Je suppose, après deleteInstanceId
Je pourrais immédiatement appeler getToken()
encore, mais ça ressemble à un piratage.
Pas vraiment. C'est ainsi que vous obtiendrez le nouveau jeton généré (à condition qu'il soit déjà généré). Donc je pense que c'est bon.