Il servizio di installazione di Firebase (FIS) fornisce un ID installazione di Firebase (FID) per ogni istanza installata di un'app Firebase. L'ID installazione di Firebase viene utilizzato internamente dai seguenti servizi Firebase:
| Servizio Firebase | Funzionalità di installazione di Firebase |
|---|---|
| Firebase Cloud Messaging |
Firebase Cloud Messaging utilizza gli ID installazione di Firebase per scegliere i dispositivi di destinazione per la consegna dei messaggi. |
| Firebase Crashlytics |
Firebase Crashlytics ruota l'UUID di installazione di Crashlytics in base alle modifiche apportate all'ID di installazione Firebase dell'istanza dell'app. In futuro, l'ID installazione potrebbe essere utilizzato per attivare funzionalità che migliorano i servizi di segnalazione e gestione degli arresti anomali. |
| Firebase In-App Messaging |
Firebase In-App Messaging utilizza gli ID installazione di Firebase per scegliere i dispositivi di destinazione per la consegna dei messaggi. |
| Firebase Performance Monitoring |
Performance Monitoring utilizza gli ID di installazione di Firebase per calcolare il numero di installazioni Firebase univoche che accedono alle risorse di rete, per garantire che i pattern di accesso siano sufficientemente anonimi. Utilizza inoltre gli ID installazione di Firebase con Firebase Remote Config per gestire la frequenza dei report sugli eventi relativi alle prestazioni. |
| Firebase Remote Config |
Remote Config utilizza gli ID installazione di Firebase per selezionare i valori di configurazione da restituire ai dispositivi degli utenti finali. La funzionalità di personalizzazione di Remote Config utilizza gli ID installazione di Firebase per associare i dati sugli eventi dell'app alle installazioni di Firebase al fine di prevedere e restituire valori di configurazione ottimali ai dispositivi degli utenti finali. |
| Firebase ML |
Le credenziali chiamate token di autenticazione dell'installazione vengono utilizzate da Firebase ML per l'autenticazione dei dispositivi durante l'interazione con le istanze dell'app, ad esempio per distribuire i modelli degli sviluppatori alle istanze dell'app. |
| Firebase User Segmentation Storage |
Firebase User Segmentation Storage archivia gli ID installazione di Firebase e gli attributi e i segmenti correlati per fornire informazioni di targeting ad altri servizi Firebase che li utilizzano. |
In genere, i servizi Firebase utilizzano il servizio di installazioni Firebase senza richiedere agli sviluppatori di interagire direttamente con l'API FIS. Tuttavia, esistono casi in cui gli sviluppatori di app potrebbero voler chiamare direttamente l'API FIS, ad esempio:
- Per eliminare un'installazione di Firebase e i dati associati.
- Per recuperare gli identificatori (ID installazione Firebase) per scegliere come target installazioni di app specifiche.
- Per recuperare i token di autenticazione dell'installazione per autenticare le installazioni di Firebase.
Per iniziare a chiamare direttamente l'API FIS, aggiungi l'SDK alla tua app.
Aggiungi l'SDK Firebase Installations alla tua app
iOS+
- Aggiungi la dipendenza per le installazioni di Firebase al tuo Podfile:
pod 'FirebaseInstallations'
- Esegui
pod installe apri il file.xcworkspacecreato. - Importa il modulo
FirebaseCorenel tuoUIApplicationDelegate, nonché tutti gli altri moduli Firebase utilizzati dal tuo delegato dell'app. Ad esempio, per utilizzare Cloud Firestore e 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; // ...
- Configura un'istanza condivisa
FirebaseAppnel metodoapplication(_:didFinishLaunchingWithOptions:)del tuo delegato dell'app: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];
- Se utilizzi SwiftUI, devi creare un delegato dell'applicazione e collegarlo alla struttura
ApptramiteUIApplicationDelegateAdaptoroNSApplicationDelegateAdaptor. Devi anche disattivare lo swizzling del delegato dell'app. Per maggiori informazioni, consulta le istruzioni di SwiftUI.SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
Android
Aggiungi la dipendenza per l'SDK Android per le installazioni di Firebase al file Gradle del modulo (a livello di app) (solitamente app/build.gradle):
implementation 'com.google.firebase:firebase-installations:20.0.0'
JavaScript
A seconda di come è ospitata la tua applicazione web, la configurazione potrebbe essere gestita automaticamente o potrebbe essere necessario aggiornare l'oggetto di configurazione Firebase.
Ad esempio, se le dipendenze vengono aggiunte in index.html, aggiungi la dipendenza nell'elemento <head>:
<script src="/__/firebase/13.0.0/firebase-installations.js"></script>
Flutter
Dalla directory principale del progetto Flutter, esegui il seguente comando per installare il plug-in delle installazioni Firebase:
flutter pub add firebase_app_installationsRicostruisci il progetto:
flutter runImporta il plug-in delle installazioni Firebase:
import 'package:firebase_app_installations/firebase_app_installations.dart';
Elimina un'installazione di Firebase
I dati associati a un'installazione di Firebase in genere non consentono l'identificazione personale. Tuttavia, può essere utile offrire agli utenti un'opzione per gestire ed eliminare questi dati.
Gli ID installazione Firebase sono diversi per ogni installazione di ogni applicazione; applicazioni diverse sullo stesso dispositivo hanno ID installazione Firebase diversi. Gli ID installazione di Firebase identificano le installazioni di app e i dati associati a queste installazioni.
Quando elimini un ID installazione, i dati associati a quell'ID installazione vengono rimossi dai sistemi attivi e di backup di tutti i servizi Firebase che utilizzano gli ID installazione Firebase per identificare le installazioni entro 180 giorni. Questo processo è descritto in linea generale nella dichiarazione di Google sull'eliminazione e sulla conservazione.
A meno che non disattivi tutti i servizi che generano FID nella tua app, FIS crea un nuovo ID entro pochi giorni. Firebase considera l'ID appena creato come una nuova installazione di Firebase e non lo associa in alcun modo all'ID o ai dati precedenti.
Elimina un ID istanza Firebase con una chiamata API client
Per eliminare i FID generati dai servizi Firebase, chiama il metodo appropriato dall'SDK di installazione di Firebase:
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();
Elimina un FID con una chiamata API del server
Per eliminare un FID con una chiamata API server, aggiungi l'SDK Firebase Admin al tuo server, se non l'hai già fatto.
Una volta aggiunto l'SDK, elimina i FID tramite una chiamata alla funzione di eliminazione nel linguaggio che preferisci (nota: ad eccezione di Node.js, questi metodi riflettono la denominazione dell'ID istanza. Tuttavia, tutti eliminano effettivamente il FID quando vengono chiamati con qualsiasi SDK Firebase corrente).
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)
Vai
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)
}
Quando elimini un ID installazione Firebase con una chiamata API server, i servizi Firebase avviano la procedura per eliminare i dati associati a quell'ID installazione, smettono di accettare nuovi dati per quell'ID nel corso di 1-2 giorni e poi inviano una notifica all'app client per comunicare che l'ID è stato eliminato. Finché Firebase non invia una notifica all'app client, alcuni servizi dell'app potrebbero continuare a utilizzare l'ID come target. Ad esempio, un'installazione di Firebase potrebbe continuare a ricevere notifiche FCM per alcune ore.
Se vuoi eliminare l'ID installazione Firebase corrente e utilizzare immediatamente i servizi Firebase con un nuovo ID non correlato, utilizza l'API client per gestire l'eliminazione.
Recupera gli identificatori client
Se hai l'esigenza di identificare installazioni particolari della tua app, puoi farlo recuperando l'ID installazione di Firebase. Ad esempio, per creare segmenti di installazioni di app per l'importazione in BigQuery o per eseguire test durante lo sviluppo di Firebase In-App Messaging, puoi identificare e scegliere come target i dispositivi corretti utilizzando gli ID installazione di Firebase corrispondenti.
Per recuperare un ID di installazione Firebase:
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();
Recupera i token di autenticazione dell'installazione
I servizi Firebase possono autenticare le installazioni di Firebase con i token di autenticazione recuperati da FIS. Ad esempio, quando progetti test A/B per Remote Config, puoi autenticare un dispositivo di test target utilizzando un token di autenticazione dell'installazione.
Un token di autenticazione dell'installazione è un token di connessione di breve durata in formato JSON Web Token (JWT) contenente le seguenti informazioni per un'installazione:
- L'ID di installazione Firebase
- Il progetto associato (
projectNumber) - L'ID applicazione Firebase associato (
appId) - La data di scadenza del token
Un token di autenticazione dell'installazione non può essere revocato e rimane valido fino alla data di scadenza. La durata predefinita del token è di una settimana.
Per recuperare un token di autenticazione dell'installazione:
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();
Monitora il ciclo di vita dell'ID installazione di Firebase
Durante il normale funzionamento di un'app, gli ID installazione di Firebase (FID) non richiedono un monitoraggio speciale. Tuttavia, le app che recuperano e utilizzano esplicitamente gli ID istanza Firebase devono aggiungere una logica per monitorare la potenziale eliminazione o rotazione dell'ID istanza Firebase. Ecco alcuni casi in cui gli ID famiglia potrebbero essere eliminati o ruotati:
- Disinstallazione o reinstallazione dell'app, ad esempio quando un utente finale la installa su un nuovo dispositivo.
- L'utente finale svuota la cache dell'app o del dispositivo.
- L'eliminazione dell'ID FID viene attivata nel backend a causa dell'inattività dell'app (attualmente la soglia è di 270 giorni di inattività).
Quando le app subiscono la rotazione o l'eliminazione del FID in questi casi, viene assegnato loro un nuovo FID. Inoltre, il token di autenticazione dell'installazione associato a un FID eliminato viene eliminato, indipendentemente dalla sua scadenza, e viene sostituito con un nuovo token di autenticazione dell'installazione.
Le app possono monitorare queste modifiche e rispondere di conseguenza.
Per monitorare la rotazione dell'ID di federazione:
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]; }];
Un NSNotification denominato NSNotificationName.InstallationIDDidChange viene pubblicato nel NSNotificationCenter predefinito ogni volta che viene assegnato un nuovo FID.
Android
I client Kotlin e Java devono aggiungere una logica di ripetizione per rispondere alle chiamate non riuscite per recuperare il nuovo FID.
JavaScript
Le app web possono iscriversi all'hook onIdChange.
Ogni volta che viene creato un nuovo FID, viene attivato il callback sottoscritto:
await firebase.installations().onIdChange((newId) => { console.log(newId); // TODO: Handle new installation ID. });
Dart
FirebaseInstallations.instance.onIdChange.listen((token) {
print('FID token: $token');
});
Esegui la migrazione dall'ID istanza alle installazioni Firebase
Prima dell'introduzione delle installazioni di Firebase, Firebase si basava sull'SDK Instance ID per gli identificatori delle installazioni di app. Le installazioni di Firebase offrono vantaggi significativi rispetto all'ID istanza in termini di affidabilità, prestazioni e sicurezza. Le app Firebase che dipendono dall'SDK Instance ID devono eseguire la migrazione alle installazioni di Firebase.
La procedura di migrazione è diversa a seconda dell'app:
Le app che non chiamano direttamente le API Instance ID possono eseguire la migrazione aggiornando le versioni dell'SDK. La maggior parte delle app Firebase rientra in questa categoria.
Le app che effettuano esplicitamente chiamate API all'ID istanza devono aggiornare le versioni dell'SDK e apportare modifiche al codice per sostituire i metodi dell'ID istanza con i loro equivalenti Firebase o FCM. Se la tua app utilizza l'ID istanza per recuperare i token di registrazione FCM o utilizza esplicitamente l'ID istanza per scegliere come target le istanze dell'app o per qualsiasi altro scopo, dovrai aggiornare il codice dell'applicazione.
Al momento, FIS è compatibile con le versioni precedenti dell'identificatore legacy ID istanza Firebase. L'eliminazione di un IID è un metodo alternativo per richiedere l'eliminazione dei dati con questi SDK Firebase:
- iOS 6.14.0 e versioni precedenti
- SDK Android precedenti al 27 febbraio 2020
Ciò significa che non è obbligatorio eseguire la migrazione delle app alle installazioni di Firebase; tuttavia, è vivamente consigliato.
Esegui l'upgrade alle versioni minime dell'SDK per le installazioni di Firebase
Per eseguire la migrazione dall'ID istanza alle installazioni di Firebase, assicurati che le tue applicazioni utilizzino almeno i numeri di versione minimi elencati dei seguenti SDK Firebase:
| SDK Firebase | Versione minima di Android | Versione minima di iOS |
| Firebase Cloud Messaging | v20.3.0 | v6.34.0 |
| Remote Config | v19.2.0 | v6.24.0 |
| Google Analytics for Firebase \ (SDK di misurazione) | v17.4.4 | v6.18.0 |
| Messaggistica in-app | 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 |
Aggiornamento del codice che chiama esplicitamente le API Instance ID
Se la tua app per Android o Apple utilizza direttamente i metodi dell'SDK Instance ID, puoi sostituire questo utilizzo con alternative identiche nell'SDK per le installazioni di Firebase o nell'SDK FCM.
Recupero di un identificatore
I metodi per ottenere gli ID istanza vengono sostituiti con metodi per ottenere un ID installazione. Ad esempio:
Prima
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) }
Dopo
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") } }
Eliminazione di un identificatore
I metodi per eliminare gli ID istanza vengono sostituiti con metodi per eliminare gli ID installazione Firebase. Ad esempio:
Prima
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();
Dopo
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") } }
Recupero di un token di registrazione FCM
Prima dell'introduzione di Firebase Installations, i client FCM recuperavano i token di registrazione dall'ID istanza. Ora, l'SDK FCM fornisce metodi per recuperare il token di registrazione.
Prima
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); } }];
Dopo
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); } }];