wake-up-neo.com

In welchem ​​Zeitraum ändert sich der App-Token der Firebase und wie werden sie verwaltet?

Ich bin neu bei Firebase. Ich lerne es wie ein Kleinkind, das laufen lernt. Bisher habe ich es geschafft, eine Nachricht an mein eigenes Telefon zu senden, indem ein Token verwendet wird, das von Firebase-Framework für mein Telefon generiert wurde. Nun, hier wird es schwierig (meiner Meinung nach). Im erweiterten Service FirebaseInstanceIdService gibt es eine Methode mit dem Namen onTokenRefresh(). Da es Refresh heißt, gehe ich davon aus, dass es sich ändern wird. Ich möchte wissen, wann dieses Token erstellt wird und wann es geändert wird.

Und wenn sich das ändert, nehmen Sie an, ich sende eine Nachricht an ein Gerät mit dem Token 'A', das momentan offline ist, also in die Warteschlange gestellt wird. Wenn das Gerät jetzt online ist, "aktualisiert" es das Token auf "B". Jetzt, da die Nachricht an Token 'A' gesendet werden sollte, wird die Nachricht nie zugestellt. Wie kann ich mit dieser Situation umgehen?

40
roostaamir

Das Token wird nach dem ersten Start der App generiert, sobald das Telefon eine Verbindung zu den Google-Servern herstellen kann. Aufgrund der erforderlichen Konnektivität geschieht dies möglicherweise nicht sofort, in den meisten Fällen jedoch nur wenige Sekunden, nachdem der Benutzer die App geöffnet hat. Sobald das Token generiert wurde, wird die Methode onTokenRefresh() aufgerufen.

Wie Sie darauf hingewiesen haben, kann sich das Token ändern. In diesem Fall wird die onTokenRefresh()-Methode erneut aufgerufen.
Das Aktualisierungsereignis ist irgendwie selten. Erwarten Sie nicht, es oft zu sehen.

Wenn das Aktualisierungstoken auftritt, werden alle Nachrichten, die "erfolgreich" gesendet wurden (die API hat eine Nachrichten-ID zurückgegeben) an das alte Token gesendet.

Schließlich funktioniert das alte Token auch nach der Aktualisierung noch eine kurze Zeit, damit die App das neue Token an das Backend weiterleiten kann.

50
Diego Giorgini

Beim ersten Start Ihrer App generiert das SDK des FCM das Registrierungstoken für die Instanz der Clientanwendung. Wie oben gesagt, ist es ein seltenes Ereignis. Um genau zu sein, kann sich das Registrierungstoken ändern, wenn:

  • Die App löscht die Instanz-ID. 
  • Die App wird auf einem neuen Gerät wiederhergestellt
  • Der Benutzer deinstalliert/installiert die App neu
  • Der Benutzer löscht die App-Daten.

Instanz-ID stellt eine eindeutige ID für jede Instanz Ihrer Anwendungen zur Verfügung. Instanz-ID bietet eine einfache API zum Generieren von Sicherheitstoken, die Dritten den Zugriff auf serverseitige verwaltete Ressourcen Ihrer App ermöglichen. Der Instanz-ID-Server kann Ihnen sogar mitteilen, auf welchem ​​Gerät sich Ihre App befindet installiert ist, wurde zuletzt verwendet. Mit dieser Option können Sie entscheiden, ob Sie Daten aus der App behalten oder eine Push-Nachricht senden möchten, um sich erneut mit den Benutzern zu beschäftigen.

Bei jeder Änderung des Gerätetoken wird dies in der onTokenRefresh () -Methode wiedergegeben. Wenn das Gerätetoken beim Ändern abgerufen wird, können Sie diese Methode aufrufen, um das aktualisierte Token abzurufen.

und um das Gerätetoken jederzeit abzurufen, können wir die FirebaseInstanceId.getInstance (). getToken () - Methode verwenden, um das aktuelle Gerätetoken abzurufen. Es dauert etwas, bis das Gerätetoken abgerufen wird.

Klicken Sie auf hier , um mehr über den Zugriff auf das Geräteregistrierungstoken zu erfahren. 

21
Prakhar Anand
  • onTokenRefresh () und FirebaseInstanceIdService sind veraltet.
  • Dieser Aufruf ist ebenfalls veraltet FirebaseInstanceId.getInstance (). GetToken ()

Statt sollten Sie onNewToken (String token) in FirebaseMessagingService überschreiben. Diese Methode wird ausgelöst, wenn das Token geändert wird. Nachdem Sie diese Methode überschrieben haben, können Sie FirebaseInstanceIdService sicher entfernen, der onTokenRefresh () enthält.

Wann kann sich das Token ändern?

  • App löscht Instanz-ID
  • Die App wird auf einem neuen Gerät wiederhergestellt
  • Benutzer deinstalliert/installiert die App neu
  • Benutzer löscht App-Daten

So rufen Sie das aktuelle Token ab:

durch Aufruf von FirebaseInstanceId.getInstance (). getInstanceId ():

FirebaseInstanceId.getInstance().getInstanceId()
    .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
        @Override
        public void onComplete(@NonNull Task<InstanceIdResult> task) {
            if (!task.isSuccessful()) {
                Log.w(TAG, "getInstanceId failed", task.getException());
                return;
            }

            // Get new Instance ID token
            String token = task.getResult().getToken();

            // Log and toast
            String msg = getString(R.string.msg_token_fmt, token);
            Log.d(TAG, msg);
            Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Weitere Informationen: https://firebase.google.com/docs/cloud-messaging/Android/client

Für Verwalten von Token für eine bestimmte Absender-ID (außer der Standard-Absender-ID) überprüfe hier

0
Islam Assi