Firebase-Installationen verwalten

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

Firebase-Dienst Firebase-Installationsfunktion
Firebase Cloud Messaging

Firebase Cloud Messaging verwendet Firebase-Installations-IDs, um Geräte für die Nachrichtenübermittlung auszuwählen.

Firebase Crashlytics

Firebase Crashlytics rotiert die Crashlytics-Installation UUID basierend auf Änderungen am Firebase der App-Instanz . Künftig werden die Mit der Installations-ID können Funktionen aktiviert werden, die Absturzberichte und die Absturzverwaltungsdienste zu verbessern.

Firebase In-App Messaging

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

Firebase Performance Monitoring

Performance Monitoring verwendet Firebase Installations-IDs um die Anzahl der einzelnen Firebase-Installationen zu berechnen, Netzwerkressourcen, um sicherzustellen, dass Zugriffsmuster nicht ausreichend anonym sind. Außerdem werden Firebase Installations-IDs mit Firebase Remote Config um den Bericht zu Leistungsberichten zu verwalten.

Firebase Remote Config

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

Firebase ML

Anmeldedaten aufgerufen Authentifizierungstokens für die Installation werden von Firebase ML für Geräteauthentifizierung bei der Interaktion mit der App zum Verteilen von Entwicklermodellen auf App-Instanzen.

Firebase Storage für Nutzersegmentierung

Firebase User Segmentation Storage speichert Firebase Installations-IDs zugehöriger Attribute und Segmente, um Ausrichtungsinformationen für andere Firebase-Dienste, die sie nutzen.

In der Regel verwenden Firebase-Dienste den Firebase-Installationsdienst ohne Entwickler müssen direkt mit der FIS API interagieren. 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 damit verbundenen Daten.
  • So rufen Sie Kennungen (Firebase Installations-IDs) für das Targeting ab bestimmte App-Installationen.
  • So rufen Sie Authentifizierungstokens für die Installation zur Authentifizierung von Firebase ab: Installationen.

Wenn Sie die FIS API direkt aufrufen möchten, fügen Sie Ihrer App das SDK hinzu.

Füge deiner App das Firebase installs SDK hinzu

iOS+

  1. Fügen Sie der Podfile-Datei die Abhängigkeit für Firebase-Installationen hinzu:
    pod 'FirebaseInstallations'
  2. Führen Sie pod install aus und öffnen Sie die erstellte .xcworkspace-Datei.
  3. Importieren Sie das FirebaseCore-Modul in Ihre UIApplicationDelegate sowie alle anderen Firebase-Module, die Ihr App-Delegat verwendet. So verwenden Sie beispielsweise Cloud Firestore und Authentication:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. Konfigurieren Sie ein FirebaseApp freigegebene Instanz im Methode application(_:didFinishLaunchingWithOptions:):

    SwiftUI

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

    Swift

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

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  5. Wenn Sie SwiftUI verwenden, müssen Sie einen Anwendungsdelegierten erstellen und diesen anhängen. zu deiner App-Struktur über UIApplicationDelegateAdaptor oder NSApplicationDelegateAdaptor Außerdem müssen Sie das App-Delegate-Swizzling deaktivieren. Für Weitere Informationen finden Sie in der SwiftUI-Anleitung.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

Android

Füge die Abhängigkeit für das Android SDK für Firebase-Installationen zu deinem Gradle-Datei des Moduls (auf App-Ebene) (in der Regel app/build.gradle):

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

JavaScript

Je nachdem, wie Ihre Webanwendung gehostet wird, wird Ihre Konfiguration möglicherweise automatisch verarbeitet oder Sie müssen Ihr Firebase-Konfigurationsobjekt aktualisieren.

Wenn Ihre Abhängigkeiten beispielsweise in der Datei "index.html" hinzugefügt werden, fügen Sie den Parameter Abhängigkeit im <head>-Element :

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

Flutter

  1. Führen Sie im Stammverzeichnis Ihres Flutter-Projekts den folgenden Befehl aus, um das Installations-Plug-in für Firebase zu installieren:

    flutter pub add firebase_app_installations
    
  2. Projekt neu erstellen:

    flutter run
    
  3. Importieren Sie das Firebase-Installations-Plug-in:

    import 'package:firebase_app_installations/firebase_app_installations.dart';
    

Firebase-Installation löschen

Mit einer Firebase-Installation verknüpfte Daten sind in der Regel nicht personenbezogene Daten. identifizieren können. Dennoch kann es hilfreich sein, Nutzern die Möglichkeit geben, diese Daten zu verwalten und zu löschen.

Firebase Installations-IDs unterscheiden sich für jede Installation application; verschiedene Anwendungen auf demselben Gerät haben unterschiedliche Firebase Installations-IDs. Firebase Installations-IDs identifizieren die App Installationen und Daten, diese App-Installationen.

Wenn Sie eine Installations-ID löschen, werden die damit verknüpften Daten wird die Installations-ID aus allen Live- und Sicherungssystemen aller Firebase-Dienste, die Installations-IDs von Firebase verwenden, um Installationen zu identifizieren innerhalb von 180 Tagen. Dieser Vorgang wird allgemein in der Erklärung zum Löschen und Aufbewahren von Daten.

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

FID mit einem Client-API-Aufruf löschen

So löschen Sie von Firebase-Diensten generierte FIDs: Rufen Sie die entsprechende Methode aus dem Firebase installs SDK auf:

Swift

do {
  try await Installations.installations().delete()
  print("Installation deleted");
} catch {
  print("Error deleting installation: \(error)")
}

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

Dart

await FirebaseInstallations.instance.delete();

FID mit einem Server-API-Aufruf löschen

So löschen Sie eine FID mit einer Server-API Fügen Sie Ihrem Server das Firebase Admin SDK hinzu, falls noch nicht geschehen.

Sobald das SDK hinzugefügt wurde, löschen Sie FIDs über einen Aufruf der Löschfunktion in der Sprache Ihrer Wahl verwenden (Hinweis: Mit Ausnahme von Node.js die Instanz-ID-Benennung. Sie löschen jedoch alle FID beim Aufruf mit einem beliebigen aktuellen Firebase 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)

Go

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, beginnen die Firebase-Dienste mit dem Löschen der mit dieser Installations-ID verknüpften Daten. Innerhalb von ein bis zwei Tagen werden keine neuen Daten mehr für diese ID akzeptiert. Anschließend wird die Client-App darüber informiert, dass die ID gelöscht wurde. Bis Firebase die Client-App benachrichtigt, der App-Dienste kann dennoch auf die ID ausgerichtet sein, z. B. eine Firebase- erhält die Installation möglicherweise noch einige Zeit lang FCM-Benachrichtigungen Stunden.

Wenn Sie die aktuelle Installations-ID von Firebase löschen und sofort verwenden möchten Firebase-Dienste mit einer neuen, nicht zugehörigen ID – Client API verwenden wie der Löschvorgang verarbeitet wird.

Client-IDs abrufen

Falls bestimmte Installationen Ihrer App identifiziert werden müssen, kann die Installations-ID Firebase abrufen. Um beispielsweise Segmente von App-Installationen für den BigQuery-Import während der Firebase In-App Messaging-Entwicklung testen, können Sie Sie können die richtigen Geräte mit den entsprechenden Firebase-Installations-IDs auswählen.

So rufen Sie eine Firebase-Installations-ID ab:

Swift

do {
  let id = try await Installations.installations().installationID()
  print("Installation ID: \(id)")
} catch {
  print("Error fetching id: \(error)")
}

Objective-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);

Dart

String id = await FirebaseInstallations.instance.getId();

Authentifizierungstoken für die Installation abrufen

Firebase-Dienste können Firebase-Installationen mit Authentifizierungstokens authentifizieren, die aus FIS abgerufen wurden. Wenn Sie beispielsweise A/B-Tests für Remote Config entwerfen, können Sie ein gezieltes Testgerät mit einem Installationsauthentifizierungstoken authentifizieren.

Ein Authentifizierungstoken für die Installation ist ein kurzlebiges Inhabertoken im JSON-Web-Token-Format (JWT), das die folgenden Informationen für Installation:

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

Ein Authentifizierungstoken für die Installation kann nicht widerrufen werden und bleibt gültig bis deren Ablaufdatum. Die Standardtokenlebensdauer beträgt eine Woche.

So rufen Sie ein Authentifizierungstoken für die Installation ab:

Swift

do {
  let result = try await Installations.installations()
    .authTokenForcingRefresh(true)
  print("Installation auth token: \(result.authToken)")
} catch {
  print("Error fetching token: \(error)")
}

Objective-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

val forceRefresh = true
FirebaseInstallations.getInstance().getToken(forceRefresh)
    .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);

Dart

String token = await FirebaseInstallations.instance.getToken();

Lebenszyklus der Firebase-Installations-ID im Blick behalten

Während des normalen Betriebs einer App müssen Firebase-Installations-IDs (FIDs) nicht speziell überwacht werden. Apps, die FIDs explizit abrufen und verwenden, sollten Fügen Sie eine Logik hinzu, um das potenzielle Löschen oder Drehen der FID. In den folgenden Fällen können FIDs gelöscht oder rotiert werden:

  • Deinstallation oder Neuinstallation der App, z. B. wenn ein Endnutzer die App auf einem neuen Gerät installiert.
  • Der Endnutzer löscht den Cache der App oder des Geräts.
  • Das Löschen der FID wird aufgrund der Anwendung im Backend ausgelöst Inaktivität (derzeit beträgt der Grenzwert hierfür 270 Tage Inaktivität).

Wenn bei Apps in diesen Apps eine FID-Rotation oder -Löschung auftritt wird ihnen eine neue FID zugewiesen. Die Das mit einer gelöschten FID verknüpfte Installationstoken für die Authentifizierung ist gelöscht und durch ein neues Authentifizierungstoken der Installation.

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

So überwachen Sie die FID-Rotation:

Swift

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

Objective-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];
}];

Eine NSNotification mit dem Namen NSNotificationName.InstallationIDDidChange ist an das Standard-NSNotificationCenter veröffentlicht, wenn ein neuer FID ist zugewiesen.

Android

Kotlin- und Java-Clients sollten Wiederholungslogik hinzufügen, um auf fehlgeschlagene Aufrufe zu reagieren um die neue FID abzurufen.

JavaScript

Web-Apps können den Hook onIdChange abonnieren.

Jedes Mal, wenn eine neue FID erstellt wird, wird der abonnierte Rückruf ausgelöst:

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

Dart

FirebaseInstallations.instance.onIdChange.listen((token) {
  print('FID token: $token');
});

Von Instanz-ID zu Firebase-Installationen migrieren

Vor der Einführung von Firebase basierte Firebase auf dem Instanz-ID-SDK zur Kennzeichnung von App-Installationen. Firebase Installationen bietet gegenüber der Instanz-ID erhebliche Vorteile in Bezug auf Zuverlässigkeit, Leistung, und Sicherheit. Firebase-Apps, die vom Instance ID SDK abhängig sind, sollten migriert werden bis Firebase Installationen.

Der Migrationsprozess unterscheidet sich je nach Anwendung:

  • Apps, die Instance ID APIs nicht direkt aufrufen, können auf folgende Weise migrieren: deren SDK-Versionen aktualisieren. Die meisten Firebase-Apps fallen in diese Kategorie.

  • Apps, die explizit API-Aufrufe an die Instanz-ID senden, müssen SDK-Versionen aktualisieren und Änderungen am Code vornehmen, um die Instanz-ID zu ersetzen mit ihren Firebase Installationen oder FCM-Äquivalente. Wenn Ihre App Instanz-ID zum Abrufen von FCM-Registrierungstokens oder verwendet explizit für das Targeting von App-Instanzen oder für jeden anderen Zweck verwenden möchten, müssen Sie Ihren Anwendungscode aktualisieren.

Derzeit ist FIS ist abwärtskompatibel mit der alten Kennung Firebase-Instanz-ID. Das Löschen einer Id ist eine alternative Methode, um das Löschen von Daten mit den folgenden Firebase SDKs anzufordern:

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

Das bedeutet, dass Apps nicht erforderlich sind, um zu Firebase-Installationen zu migrieren. Dies wird jedoch dringend empfohlen.

Für Firebase Installationen wird ein Upgrade auf die Mindest-SDK-Versionen durchgeführt

Für die Migration von Instanz-ID zu Firebase-Installationen müssen Sie sicherstellen, dass die Anwendungen verwenden mindestens die angegebenen Mindestversionsnummer der folgenden Firebase SDKs:

Firebase SDK Mindestversion von Android Mindestens erforderliche iOS-Version
Firebase Cloud Messaging Version 20.3.0 v6.34.0
Remote Config Version 19.2.0 Version 6.24.0
Google Analytics for Firebase (Measurement SDK) Version 17.4.4 Version 6.18.0
In-App-Messaging Version 19.0.7 Version 6.24.0
Performance Monitoring Version 19.0.8 Version 6.21.0
Crashlytics Version 17.2.1 Version 6.23.0
ML Kit Version 22.1.2 Version 6.28.0

Code aktualisieren, der Instanz-ID-APIs explizit aufruft

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

Kennung abrufen

Methoden zum Abrufen von Instanz-IDs werden durch Methoden zum Abrufen von Installationen ersetzt ID. Beispiel:

Vorher

Swift

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)"
  }
}

Objective-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

Swift

do {
  let id = try await Installations.installations().installationID()
  print("Installation ID: \(id)")
} catch {
  print("Error fetching id: \(error)")
}

Objective-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")
    }
}

Kennung löschen

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

Vorher

Swift

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

Objective-C

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

Android

FirebaseInstanceId.deleteInstanceId();

Nach

Swift

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

Objective-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")
    }
}

FCM-Registrierungstoken wird abgerufen

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

Vorher

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

Swift

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)"
  }
}

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

Swift

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)"
  }
}

Objective-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;
  }
}];