Firebase-Installationen und ‑IDs verwalten

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

Firebase-Dienst Funktionen für Firebase-Installationen
Firebase Cloud Messaging

Firebase Cloud Messaging verwendet Firebase-Installations-IDs, um Geräte für die Zustellung von Nachrichten auszurichten.

Firebase Crashlytics

Firebase Crashlytics rotiert die Crashlytics-Installations-UUID basierend auf Änderungen an der Firebase-Installations-ID der App-Instanz. In Zukunft kann die Installations-ID verwendet werden, um Funktionen zu aktivieren, die die Dienste für Absturzberichte und Absturzverwaltung verbessern.

Firebase In-App Messaging

Firebase In-App Messaging verwendet Firebase-Installations-IDs, um Geräte für die Zustellung von Nachrichten auszurichten.

Firebase Performance Monitoring

In Performance Monitoring werden Firebase-Installations-IDs verwendet, um die Anzahl der eindeutigen Firebase-Installationen zu berechnen, die auf Netzwerkressourcen zugreifen. So wird sichergestellt, dass Zugriffsmuster ausreichend anonym sind. Außerdem werden Firebase-Installations-IDs mit Firebase Remote Config verwendet, um die Rate der Berichterstellung von Leistungsereignissen zu verwalten.

Firebase Remote Config

In Remote Config werden Firebase-Installations-IDs verwendet, um Konfigurationswerte auszuwählen, die an Endnutzergeräte zurückgegeben werden sollen. Bei der Personalisierungsfunktion Remote ConfigFirebase werden Installations-IDs verwendet, um App-Ereignisdaten mit Firebase-Installationen zu verknüpfen und so optimale Konfigurationswerte für Endgeräte vorherzusagen und zurückzugeben.

Firebase ML

Anmeldedaten mit dem Namen Installationsauthentifizierungstokens werden von Firebase ML für die Geräteauthentifizierung verwendet, wenn mit App-Instanzen interagiert wird, z. B. um Entwicklermodelle an App-Instanzen zu verteilen.

Firebase Storage für Nutzersegmentierung

Im Firebase Storage für Nutzersegmentierung werden Firebase-Installations-IDs sowie zugehörige Attribute und Segmente gespeichert, um Targeting-Informationen für andere Firebase-Dienste bereitzustellen, die diese verwenden.

In der Regel 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.:

  • So löschen Sie eine Firebase-Installation und die mit der Installation verknüpften Daten.
  • Sie können Kennungen (Firebase-Installations-IDs) abrufen, um bestimmte App-Installationen auszurichten.
  • Zum Abrufen von Installationsauthentifizierungstokens zur Authentifizierung von Firebase-Installationen.

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

Das Firebase Installations SDK in Ihre App einbinden

iOS+

  1. Fügen Sie Ihrem Podfile die Abhängigkeit für Firebase-Installationen hinzu:
    pod 'FirebaseInstallations'
  2. Führen Sie pod install aus und öffnen Sie die erstellte Datei .xcworkspace.
  3. Importieren Sie das FirebaseCore-Modul in Ihre UIApplicationDelegate sowie alle anderen Firebase-Module, die von Ihrem App-Delegate verwendet werden. 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 eine freigegebene FirebaseApp-Instanz in der application(_:didFinishLaunchingWithOptions:)-Methode des App-Delegaten:

    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 ein Anwendungs-Delegate erstellen und es über UIApplicationDelegateAdaptor oder NSApplicationDelegateAdaptor an Ihre App-Struktur anhängen. Außerdem müssen Sie das Swizzling von App-Delegaten deaktivieren. Weitere Informationen

    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ügen Sie die Abhängigkeit für das Android SDK für Firebase-Installationen in die Gradle-Datei Ihres Moduls (auf App-Ebene) ein (in der Regel app/build.gradle):

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

JavaScript

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

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

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

Flutter

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

    flutter pub add firebase_app_installations
    
  2. Erstellen Sie Ihr Projekt neu:

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

    import 'package:firebase_app_installations/firebase_app_installations.dart';
    

Firebase-Installation löschen

Daten, die mit einer Firebase-Installation verknüpft sind, sind in der Regel nicht persönlich identifizierbar. Dennoch kann es hilfreich sein, Nutzern 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 verknüpft sind.

Wenn Sie eine Installations-ID löschen, werden die mit dieser Installations-ID verknüpften Daten innerhalb von 180 Tagen aus den Live- und Sicherungssystemen aller Firebase-Dienste entfernt, in denen Firebase-Installations-IDs zur Identifizierung von Installationen verwendet werden. Dieser Prozess wird in der Erklärung von Google zum Löschen und Aufbewahren von Daten allgemein beschrieben.

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 neue Firebase-Installation und ordnet sie in keiner Weise der vorherigen ID oder den vorherigen Daten zu.

FID mit einem Client-API-Aufruf löschen

Wenn Sie von Firebase-Diensten generierte FIDs löschen möchten, rufen Sie die entsprechende Methode aus dem Firebase-Installations-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

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

Wenn Sie eine FID mit einem Server-API-Aufruf löschen möchten, fügen Sie Ihrem Server das Firebase Admin SDK hinzu, falls noch nicht geschehen.

Nachdem Sie das SDK hinzugefügt haben, löschen Sie FIDs durch einen Aufruf der Löschfunktion in Ihrer bevorzugten Sprache. Hinweis: Mit Ausnahme von Node.js spiegeln diese Methoden die Benennung der Instanz-ID wider. Allerdings wird die FID bei allen aktuellen Firebase SDKs tatsächlich gelöscht, wenn die Funktion aufgerufen wird.

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

Wenn Sie die aktuelle Firebase-Installations-ID löschen und Firebase-Dienste sofort mit einer neuen, nicht verknüpften ID verwenden möchten, verwenden Sie die Client-API, um das Löschen zu verarbeiten.

Client-IDs abrufen

Wenn Sie bestimmte Installationen Ihrer App identifizieren müssen, können Sie die Firebase-Installations-ID abrufen. Wenn Sie beispielsweise Segmente von App-Installationen für den BigQuery-Import erstellen oder während der Firebase In-App Messaging-Entwicklung Tests durchführen möchten, können Sie die richtigen Geräte anhand der entsprechenden Firebase-Installations-IDs identifizieren und ausrichten.

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

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

Authentifizierungstokens für die Installation abrufen

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

Ein Installationsauthentifizierungstoken ist ein kurzlebiges Inhabertoken im JSON Web Token-Format (JWT), 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 Installationsautorisierungstoken kann nicht widerrufen werden und bleibt bis zum Ablaufdatum gültig. Die Standardlebensdauer des Tokens beträgt eine Woche.

So rufen Sie ein Installationsauthentifizierungstoken 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

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 überwachen

Während des normalen Betriebs einer App ist keine spezielle Überwachung von Firebase-Installations-IDs (FIDs) erforderlich. Bei Apps, die FIDs explizit abrufen und verwenden, sollte jedoch Logik hinzugefügt werden, um die potenzielle Löschung oder Rotation der FID zu überwachen. Hier sind einige Fälle, in denen FIDs gelöscht oder rotiert werden könnten:

  • Deinstallation oder Neuinstallation der App, z. B. wenn ein Endnutzer die App auf einem neuen Gerät installiert.
  • Der Endnutzer leert den Cache der App oder des Geräts.
  • Das Löschen der Geräte-ID wird im Backend aufgrund von Inaktivität der App ausgelöst. Derzeit liegt der Schwellenwert dafür bei 270 Tagen Inaktivität.

Wenn in diesen Fällen die FID einer App rotiert oder gelöscht wird, wird ihr eine neue FID zugewiesen. Außerdem wird das mit einer gelöschten FID verknüpfte Installationsauthentifizierungstoken unabhängig von seinem eigenen Ablaufdatum gelöscht und durch ein neues Installationsauthentifizierungstoken ersetzt.

Apps können diese Änderungen beobachten 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 wird an das Standard-NSNotificationCenter gesendet, wenn eine neue FID zugewiesen wird.

Android

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

JavaScript

Web-Apps können den onIdChange-Hook abonnieren.

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

Dart

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

Von Instance ID zu Firebase-Installationen migrieren

Vor der Einführung von Firebase-Installationen wurden in Firebase IDs für App-Installationen über das Instance ID SDK abgerufen. Firebase-Installationen bieten im Vergleich zur Instanz-ID erhebliche Vorteile in Bezug auf Zuverlässigkeit, Leistung und Sicherheit. Firebase-Apps, die vom Instance ID SDK abhängig sind, sollten zu Firebase-Installationen migriert werden.

Der Migrationsprozess hängt von Ihrer App ab:

  • Apps, die die Instance ID APIs nicht direkt aufrufen, können migriert werden, indem die SDK-Versionen aktualisiert werden. Die meisten Firebase-Apps fallen in diese Kategorie.

  • Apps, die explizit API-Aufrufe an die Instanz-ID senden, müssen SDK-Versionen aktualisieren und Codeänderungen vornehmen, um Instanz-ID-Methoden durch ihre Firebase-Installationen oder FCM-Entsprechungen zu ersetzen. Wenn Ihre App die Instanz-ID verwendet, um FCM-Registrierungstokens abzurufen, oder die Instanz-ID explizit verwendet, um App-Instanzen auszurichten oder für andere Zwecke, müssen Sie Ihren Anwendungscode aktualisieren.

Derzeit ist FIS abwärtskompatibel mit der alten Kennung „Firebase-Instanz-ID“. Das Löschen einer IID ist eine alternative Methode zum Anfordern des Löschens von Daten mit diesen Firebase-SDKs:

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

Das bedeutet, dass Apps nicht migriert werden müssen, um Firebase-Installationen zu unterstützen. Es wird jedoch dringend empfohlen.

Aktualisierung auf die mindestens erforderlichen SDK-Versionen für Firebase-Installationen

Wenn Sie von der Instanz-ID zu Firebase-Installationen migrieren möchten, müssen Ihre Anwendungen mindestens die aufgeführten Mindestversionsnummern der folgenden Firebase SDKs verwenden:

Firebase SDK Mindestversion von Android Mindestversion von iOS
Firebase Cloud Messaging v20.3.0 v6.34.0
Remote Config v19.2.0 v6.24.0
Google Analytics for Firebase (Analyse-SDK) v17.4.4 v6.18.0
In-App-Messaging v19.0.7 v6.24.0
Performance Monitoring v19.0.8 v6.21.0
Crashlytics v17.2.1 v6.23.0
ML Kit v22.1.2 v6.28.0

Code aktualisieren, der explizit Instance ID APIs aufruft

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

ID abrufen

Methoden zum Abrufen von Instanz-IDs werden durch Methoden zum Abrufen einer Installations-ID ersetzt. 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)")
  }
}

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];
    // display message
    NSLog(@"%@", 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

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

Nachher

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

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

ID löschen

Methoden zum Löschen von Instanz-IDs werden durch Methoden zum Löschen von Firebase-Installations-IDs ersetzt. 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();

Nachher

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

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

FCM-Registrierungstoken abrufen

Vor der Einführung von Firebase Installations haben FCM-Clients Registrierungstokens von der 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

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

InstanceID.instanceID().instanceID { result, error in
  if let error = error {
    print("Error fetching instance ID: \(error)")
  } else if let result = result {
    print("Instance ID token: \(result.token)")
  }
}

Objective-C

[[FIRInstanceID instanceID] instanceIDWithHandler:^(FIRInstanceIDResult * _Nullable result,
                                                    NSError * _Nullable error) {
  if (error != nil) {
    NSLog(@"Error fetching instance ID: %@", error);
  } else {
    NSLog(@"Instance ID token: %@", result.token);
  }
}];

Nachher

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

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 remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID 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];
    // display message
    NSLog(@"%@", message);
  }
}];