Catch up on everthing we announced at this year's Firebase Summit. Learn more

Firebase-Installationen verwalten

Der Firebase-Installationsdienst (FIS) stellt für jede installierte Instanz einer Firebase-App eine Firebase-Installations-ID (FID) bereit. Die Firebase-Installations-ID wird intern von diesen Firebase-Diensten verwendet:

Firebase-Dienst Firebase-Installationsfunktionalität
Firebase Cloud-Messaging

Firebase Cloud Messaging verwendet Firebase-Installations-IDs als Zielgeräte für die Nachrichtenzustellung.

Firebase In-App-Messaging

Firebase In-App Messaging verwendet Firebase-Installations-IDs, um Zielgeräte für die Nachrichtenzustellung zu erreichen.

Firebase-Leistungsüberwachung

Die Leistungsüberwachung verwendet Firebase-Installations-IDs, um die Anzahl der eindeutigen Firebase-Installationen zu berechnen, die auf Netzwerkressourcen zugreifen, um sicherzustellen, dass die Zugriffsmuster ausreichend anonym sind. Es verwendet auch Firebase-Installations-IDs mit Firebase Remote Config, um die Rate der Leistungsereignisberichte zu verwalten.

Firebase-Vorhersagen

Predictions verwendet Firebase-Installations-IDs, um Firebase-Installationen mit einem Projekt zu verknüpfen und eine Zeitreihe von Ereignissen abzurufen. Es verwendet diese Ereignisse, um die Vorhersage der Eintrittswahrscheinlichkeit kundenindividueller Ereignisse sowie standardmäßige Vorhersagen zu Ausgaben und Abwanderung zu ermöglichen.

Google Analytics für Firebase

Google Analytics for Firebase verwendet die Daten, um Analyse- und Zuordnungsinformationen bereitzustellen. Die genauen gesammelten Informationen können je nach Gerät und Umgebung variieren.

Firebase Remote-Konfiguration

Remote Config verwendet Firebase-Installations-IDs, um Konfigurationswerte auszuwählen, die an Endbenutzergeräte zurückgegeben werden.

Firebase ML

Credentials genannt Installation auth Token verwendet werden , durch Firebase ML für die Geräteauthentifizierung , wenn sie mit app Fällen, zum Beispiel der Interaktion, an Entwicklern Modelle app Instanzen zu verteilen.

Normalerweise verwenden Firebase-Dienste den Firebase-Installationsdienst, ohne dass Entwickler direkt mit der FIS-API interagieren müssen. Es gibt jedoch Fälle, in denen App-Entwickler die FIS-API direkt aufrufen möchten, z. B.:

  • Zum Löschen einer Firebase-Installation und der mit der Installation verknüpften Daten.
  • Um Identifikatoren (Firebase-Installations-IDs) abzurufen, um auf bestimmte App-Installationen abzuzielen.
  • Zum Abrufen von Installationsauthentifizierungstokens zur Authentifizierung von Firebase-Installationen.

Um mit dem direkten Aufrufen der FIS-API zu beginnen, fügen Sie das SDK zu Ihrer App hinzu.

Fügen Sie das Firebase-Installations-SDK zu Ihrer App hinzu

iOS+

  1. Fügen Sie die Abhängigkeit für Firebase Installationen zu Ihrem Podfile:
    pod 'Firebase/Installations'
  2. Run pod install Sie die erstellte und öffnen .xcworkspace Datei.
  3. Importieren Sie die Firebase Modul in Ihrem UIApplicationDelegate :

    Schnell

    import Firebase

    Ziel c

    @import Firebase;
  4. Konfigurieren ein FirebaseApp gemeinsame Instanz, in der Regel in Ihrem App - application:didFinishLaunchingWithOptions: Methode:

    Schnell

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Ziel c

    // Use Firebase library to configure APIs
    [FIRApp configure];

Android

Fügen Sie die Abhängigkeit für die Firebase Installationen Android SDK zu Ihrem Modul (app-Ebene) Gradle Datei ( in der Regel app/build.gradle ):

implementation 'com.google.firebase:firebase-installations:17.0.0'

JavaScript

Je nachdem , wie Ihre Web - Anwendung gehostet wird, kann die Konfiguration automatisch gehandhabt werden , oder Sie können Ihre aktualisieren müssen Firebase Konfigurationsobjekt .

Wenn Ihre Abhängigkeiten beispielsweise in index.html hinzugefügt werden, fügen Sie die Abhängigkeit im <head>-Element hinzu:

<script src="/__/firebase/9.5.0/firebase-installations.js"></script>

Löschen einer Firebase-Installation

Daten an eine Installation gebunden Firebase ist in der Regel nicht persönlich identifizieren. Dennoch kann es hilfreich sein, Benutzern die Möglichkeit zu geben, diese Daten zu verwalten und zu löschen.

Firebase-Installations-IDs sind für jede Installation jeder Anwendung unterschiedlich. verschiedene Anwendungen auf demselben Gerät haben unterschiedliche Firebase-Installations-IDs. Firebase-Installations-IDs identifizieren App-Installationen und Daten, die mit diesen App-Installationen verbunden sind.

Wenn Sie eine Installations-ID löschen, werden die mit dieser Installations-ID verknüpften Daten aus Live- und Backup-Systemen aller Firebase-Dienste entfernt, die Firebase-Installations-IDs verwenden, um Installationen innerhalb von 180 Tagen zu identifizieren. Dieser Prozess wird auf einem hohen Niveau in Googles beschrieben Aussage auf Löschung und Aufbewahrung .

Sofern Sie nicht alle FID-generierenden Dienste in Ihrer App deaktivieren, erstellt FIS innerhalb weniger Tage eine neue ID. Firebase betrachtet die neu erstellte ID als eine neue Firebase-Installation und verknüpft sie in keiner Weise mit der vorherigen ID oder den Daten.

Löschen einer FID mit einem Client-API-Aufruf

Um von Firebase-Diensten generierte FIDs zu löschen, rufen Sie die entsprechende Methode aus dem Firebase-Installations-SDK auf:

Schnell

Installations.installations().delete { error in
  if let error = error {
    print("Error deleting installation: \(error)")
    return
  }
  print("Installation deleted");
}

Ziel c

[[FIRInstallations installations] deleteWithCompletion:^(NSError *error) {
   if (error != nil) {
     NSLog(@"Error deleting Installation %@", error);
     return;
   }
   NSLog(@"Installation deleted");
}];

Java

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    }  else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

JavaScript

await firebase.installations().delete();

Löschen einer FID mit einem Server-API-Aufruf

Um einen FID mit einem Server - API - Aufruf zu löschen, fügen Sie die Firebase Admin SDK zu Ihrem Server , wenn Sie nicht bereits haben.

Sobald das SDK hinzugefügt wurde, löschen Sie FIDs durch einen Aufruf der Löschfunktion in der Sprache Ihrer Wahl (Hinweis: Mit Ausnahme von Node.js spiegeln diese Methoden die Benennung von Instanz-IDs wider. Sie alle löschen die FID jedoch tatsächlich, wenn sie mit einer aktuellen Firebase aufgerufen werden SDK).

Node.js

// An FIDsent from a client service SDK
const idToDelete = 'eyJhbGciOiJFUzI1N_iIs5';

admin.installations().deleteInstallation(idToDelete);

Java

// An FID sent from a client service SDK
String idToDelete = "eyJhbGciOiJFUzI1N_iIs5";

FirebaseInstanceId.getInstance().deleteInstanceIdAsync(idToDelete).get();

Python

  from firebase_admin import instance_id

  # An FID sent from a client service SDK
  id_to_delete = 'eyJhbGciOiJFUzI1N_iIs5'

  instance_id.delete_instance_id(id_to_delete)

gehen

client, err := app.InstanceId(ctx)
if err != nil {
  log.Fatalln("error initializing client", err)
}

iidToDelete := "eyJhbGciOiJFUzI1N_iIs5"
if err := client.DeleteInstanceId(ctx, iidToDelete); err != nil {
  log.Fatalln("error deleting FID", err)
}

Wenn Sie eine Firebase-Installations-ID mit einem Server-API-Aufruf löschen, starten die Firebase-Dienste den Vorgang zum Löschen der mit dieser Installations-ID verknüpften Daten, nehmen innerhalb von 1-2 Tagen keine neuen Daten für diese ID mehr an und benachrichtigen dann die Client-App dass die ID gelöscht wurde. Bis Firebase die Client-App benachrichtigt, können einige Dienste der App noch auf die ID abzielen. Beispielsweise kann eine Firebase-Installation noch einige Stunden lang FCM-Benachrichtigungen erhalten.

Wenn Sie die aktuelle Firebase-Installations-ID löschen und sofort Firebase-Dienste mit einer neuen, nicht verwandten ID verwenden möchten, verwenden Sie die Client-API, um den Löschvorgang abzuwickeln.

Abrufen von Client-Identifikatoren

Wenn Sie bestimmte Installationen Ihrer App identifizieren müssen, können Sie dies tun, indem Sie die Firebase-Installations-ID abrufen. Um beispielsweise während der Entwicklung von Firebase In-App Messaging Tests durchzuführen, können Sie das richtige Testgerät anhand seiner Firebase-Installations-ID identifizieren und als Ziel auswählen.

So rufen Sie eine Firebase-Installations-ID ab:

Schnell

Installations.installations().installationID { (id, error) in
  if let error = error {
    print("Error fetching id: \(error)")
    return
  }
  guard let id = id else { return }
  print("Installation ID: \(id)")
}

Ziel c

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

Java

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

JavaScript

const installationId = await firebase.installations().getId();
console.log(installationId);

Abrufen von Installations-Authentifizierungs-Token

Firebase-Dienste können Firebase-Installationen mit Authentifizierungstokens authentifizieren, die von FIS abgerufen werden. Wenn Sie beispielsweise A/B-Tests für Remote Config entwerfen, können Sie ein Zieltestgerät mithilfe eines Installationsauthentifizierungstokens authentifizieren.

Ein Installations-Auth-Token ist ein kurzlebiges Bearer-Token im JSON-Web-Token (JWT)-Format, das die folgenden Informationen für eine Installation enthält:

  • Die Firebase-Installations-ID
  • Das zugehörige Projekt ( projectNumber )
  • Die zugehörige Firebase Anwendungs - ID ( appId )
  • Das Ablaufdatum des Tokens

Ein Installationsauthentifizierungstoken kann nicht widerrufen werden und bleibt bis zu seinem Ablaufdatum gültig. Die Standard-Token-Lebensdauer beträgt eine Woche.

So rufen Sie ein Installationsauthentifizierungstoken ab:

Schnell

Installations.installations().authTokenForcingRefresh(true, completion: { (result, error) in
  if let error = error {
    print("Error fetching token: \(error)")
    return
  }
  guard let result = result else { return }
  print("Installation auth token: \(result.authToken)")
})

Ziel c

[[FIRInstallations installations] authTokenForcingRefresh:true
                                               completion:^(FIRInstallationsAuthTokenResult *result, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation token %@", error);
    return;
  }
  NSLog(@"Installation auth token: %@", [result authToken]);
}];

Java

FirebaseInstallations.getInstance().getToken(/* forceRefresh */true)
        .addOnCompleteListener(new OnCompleteListener<InstallationTokenResult>() {
    @Override
    public void onComplete(@NonNull Task<InstallationTokenResult> task) {
        if (task.isSuccessful() && task.getResult() != null) {
            Log.d("Installations", "Installation auth token: " + task.getResult().getToken());
        } else {
            Log.e("Installations", "Unable to get Installation auth token");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().getToken(/* forceRefresh */ true)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d("Installations", "Installation auth token: " + task.result?.token)
        } else {
            Log.e("Installations", "Unable to get Installation auth token")
        }
    }

JavaScript

const installationToken = await firebase.installations()
    .getToken(/* forceRefresh */ true);
console.log(installationToken);

Überwachen Sie den Lebenszyklus der Firebase-Installations-ID

Während des normalen Betriebs einer App erfordern Firebase-Installations-IDs (FIDs) keine besondere Überwachung. Apps, die FIDs explizit abrufen und verwenden, sollten jedoch Logik hinzufügen, um das potenzielle Löschen oder Rotieren der FID zu überwachen. Hier sind einige Fälle, in denen FIDs gelöscht oder rotiert werden könnten:

  • Deinstallation oder Neuinstallation der App, beispielsweise wenn ein Endbenutzer auf einem neuen Gerät installiert.
  • Der Endbenutzer löscht den Cache der App oder des Geräts.
  • Die FID-Löschung wird im Backend aufgrund von App-Inaktivität ausgelöst (derzeit liegt der Schwellenwert hierfür bei 270 Tagen Inaktivität).

Wenn Apps in solchen Fällen eine FID-Rotation oder -Löschung erfahren, wird ihnen eine neue FID zugewiesen. Außerdem wird das einem gelöschten FID zugeordnete Installations-Authentifizierungs-Token ungeachtet seiner eigenen Laufzeit gelöscht und durch ein neues Installations-Authentifizierungs-Token ersetzt.

Apps können diese Änderungen überwachen und entsprechend reagieren.

So überwachen Sie die FID-Rotation:

Schnell

installationIDObserver = NotificationCenter.default.addObserver(
        forName: .InstallationIDDidChange,
        object: nil,
        queue: nil
) { (notification) in
  // Fetch new Installation ID
  self.fetchInstallationToken()
}

Ziel c

__weak __auto_type weakSelf = self;
self.installationIDObserver = [[NSNotificationCenter defaultCenter]
        addObserverForName: FIRInstallationIDDidChangeNotification
                    object:nil
                     queue:nil
                usingBlock:^(NSNotification * _Nonnull notification) {
    // Fetch new Installation ID
    [weakSelf fetchInstallationsID];
}];

Ein NSNotification namens NSNotificationName.InstallationIDDidChange wird auf den Standard geschrieben NSNotificationCenter , wenn ein neues FID zugeordnet ist.

Android

Kotlin- und Java-Clients sollten eine Wiederholungslogik hinzufügen, um auf fehlgeschlagene Aufrufe zum Abrufen der neuen FID zu reagieren.

JavaScript

Web - Anwendungen können auf die abonnieren onIdChange Haken.

Immer wenn eine neue FID erstellt wird, wird der abonnierte Callback ausgelöst:

await firebase.installations().onIdChange((newId) => {
  console.log(newId);
  // TODO: Handle new installation ID.
});

Von Instanz-ID zu Firebase-Installationen migrieren

Vor der Einführung von Firebase-Installationen verließ sich Firebase auf das Instanz-ID-SDK für die Identifikatoren von App-Installationen. Firebase-Installationen bieten gegenüber der Instanz-ID erhebliche Vorteile in Bezug auf Zuverlässigkeit, Leistung und Sicherheit. Firebase-Apps, die vom Instanz-ID-SDK abhängig sind, sollten zu Firebase-Installationen migriert werden.

Der Migrationsprozess ist je nach App unterschiedlich:

  • Apps , die nicht direkt aufrufen Instanz - ID - APIs kann durch Migration Aktualisierung ihrer SDK - Versionen . Die meisten Firebase-Apps fallen in diese Kategorie.

  • Apps , die explizit API - Aufrufe Instanz - ID machen muß SDK - Versionen und aktualisieren make Code - Änderungen Instanz - ID Methoden mit ihrer Firebase Installationen oder FCM - Äquivalente zu ersetzen. Wenn Ihre App die Instanz-ID zum Abrufen von FCM-Registrierungstoken verwendet oder die Instanz-ID explizit für das Targeting von App-Instanzen oder für andere Zwecke verwendet, müssen Sie Ihren Anwendungscode aktualisieren.

Derzeit ist FIS abwärtskompatibel mit der Legacy-ID der Firebase-Instanz-ID. Ein IID Löschen ist eine alternative Methode zum Löschen von Daten mit dieser Firebase SDKs anfordernden:

  • iOS 6.14.0 und niedriger
  • Android-SDKs vor dem 27. Februar 2020

Dies bedeutet , dass Anwendungen nicht auf Firebase Installationen migrieren erforderlich; dies wird jedoch dringend empfohlen.

Upgrade auf SDK-Mindestversionen für Firebase-Installationen

Stellen Sie für die Migration von Instanz-ID zu Firebase-Installationen sicher, dass Ihre Anwendungen mindestens die aufgeführten Mindestversionsnummern der folgenden Firebase SDKs verwenden:

Firebase-SDK Mindestens Android-Version iOS-Mindestversion
Firebase Cloud-Messaging v20.3.0 v6.34.0
Remote-Konfiguration v19.2.0 v6.24.0
Google Analytics für Firebase \ (Mess-SDK) v17.4.4 v6.18.0
In-App-Messaging v19.0.7 v6.24.0
Leistungsüberwachung v19.0.8 v6.21.0
Crashlytics v17.2.1 v6.23.0
ML-Kit v22.1.2 v6.28.0

Aktualisieren von Code, der explizit Instanz-ID-APIs aufruft

Wenn Ihre Android- oder Apple-App direkt Instanz-ID-SDK-Methoden verwendet, können Sie diese Verwendung durch identische Alternativen im Firebase-Installations-SDK oder FCM-SDK ersetzen.

Abrufen einer Kennung

Methoden zum Abrufen von Instanz-IDs werden durch Methoden zum Abrufen einer Installations-ID ersetzt. Zum Beispiel:

Vor

Schnell

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
    self.remoteFCMTokenMessage.text = "Remote FCM registration token: \(token)"
  }
}

Ziel c

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
   if (error != nil) {
     NSLog(@"Error fetching the remote FCM registration token: %@", error);
   } else {
     NSLog(@"Remote FCM registration token: %@", token);
     NSString* message =
       [NSString stringWithFormat:@"FCM registration token: %@", token];
     self.remoteFCMTokenMessage.text = message;
   }
 }];

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                Log.d("IID_TOKEN", task.getResult().getToken());
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnSuccessListener { result ->
            Log.d("IID_TOKEN", result.token)
        }

Nach

Schnell

Installations.installations().installationID { (id, error) in
  if let error = error {
    print("Error fetching id: \(error)")
    return
  }
  guard let id = id else { return }
  print("Installation ID: \(id)")
}

Ziel c

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

Java

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

Löschen einer Kennung

Methoden zum Löschen von Instanz-IDs werden durch Methoden zum Löschen von Firebase-Installations-IDs ersetzt. Zum Beispiel:

Vor

Schnell

InstanceID.instanceID().deleteID { error in
  if let error = error {
    print("Error deleting instance ID: \(error)")
  }
}

Ziel c

[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
  if error != nil {
    NSLog(@"Error deleting instance ID: %@", error);
  }
}];

Android

FirebaseInstanceId.deleteInstanceId();

Nach

Schnell

func delete(completion: @escaping (Error?) -> Void)

Ziel c

- (void)deleteWithCompletion:(nonnull void (^)(NSError *_Nullable))completion;

Java

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    }  else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

Abrufen eines FCM-Registrierungstokens

Vor der Einführung von Firebase-Installationen haben FCM-Clients Registrierungstoken von der Instanz-ID abgerufen. Das FCM SDK bietet jetzt Methoden zum Abrufen des Registrierungstokens.

Vor

Java

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();
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })

Schnell

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
    self.remoteFCMTokenMessage.text = "Remote FCM registration token: \(token)"
  }
}

Ziel c

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
   if (error != nil) {
     NSLog(@"Error fetching the remote FCM registration token: %@", error);
   } else {
     NSLog(@"Remote FCM registration token: %@", token);
     NSString* message =
       [NSString stringWithFormat:@"FCM registration token: %@", token];
     self.remoteFCMTokenMessage.text = message;
   }
 }];

Nach

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // 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();
        }
    });

Kotlin+KTX

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

Schnell

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching FCM registration token: \(error)")
  } else if let token = token {
    print("FCM registration token: \(token)")
    self.fcmRegTokenMessage.text  = "Remote FCM registration token: \(token)"
  }
}

Ziel c

[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
  if (error != nil) {
    NSLog(@"Error getting FCM registration token: %@", error);
  } else {
    NSLog(@"FCM registration token: %@", token);
    self.fcmRegTokenMessage.text = token;
  }
}];