1

Ich verwende GCM auf Android.InstanceID kehrt ungültig Token

Ich benutze InstanceID.getInstance(...).getToken(...), um ein Push-Token zu erhalten, aber in einigen Fällen (nach Anwendungsupdates oder Neuinstallation) erhalte ich ein ungültiges Token. Wenn der Server einen Fehler NotRegistered zurückgibt, habe ich mit einem Debugger verbunden und InstanceID.getInstance(...).getToken(...) genannt. Aber dieses Token ist nicht gültig (Ich habe versucht, Push über curl -s "https://android.googleapis.com/gcm/send" ... mit diesem Token zu senden), ich erhalte NotRegistered Fehler.

Warum instanceID könnte ungültig Token zurückgeben?

Antwort

0

Schließlich fand ich eine Lösung.

ich mit instanceID aus zwei verschiedenen Fäden gearbeitet. Ich rief getToken(...) zweimal gleichzeitig an. Wenn die Instanz keinen Cache hat, erhält sie Token vom Netzwerk. Ich denke, es sendet zwei Anfragen in meinem Fall und es gibt keine Garantie für die Reihenfolge. So instanceID im Cache ein Token, aber Google Cloud eine andere.

0

Es sollte nicht ungültig Token geben.

Haben Sie alle Verfahren angewendet?

  • InstanceIDListenerService: Wenn die Token-Änderungen über die App Updates usw.
  • RegistrationIntentService: Wenn die Token-Änderungen, die Sie erhalten es über InstanceIDListenerService und diese Absicht nennen ein neues Token zu erhalten.
+0

Ich weiß es sollte nicht. Ja, ich habe all diese Prozeduren gemacht. Der interessanteste Teil ist das Erhalten des Tokens über die Instanz-ID und das Senden des Push-Vorgangs über gcm an dieses Token und den Fehler notRegistered. Es gibt also einen Moment, in dem die Instanz-ID ein ungültiges Token zurückgibt. –

+0

Ist es möglich, Ihre Code-Teile bezüglich des Tokens zu teilen? Stellen Sie übrigens sicher, dass Sie die richtige JSON-Bezeichnerdatei verwenden. – ashazar

Verwandte Themen