Il servizio di installazioni Firebase (FIS) fornisce un ID installazione Firebase (FID) per ogni istanza installata di un'app Firebase. L'ID installazione Firebase viene utilizzato internamente da questi servizi Firebase:
Servizio Firebase | Funzionalità di Firebase installazioni |
---|---|
Firebase Cloud Messaging |
Firebase Cloud Messaging usi Firebase ID di installazione per scegliere i dispositivi target per la consegna dei messaggi. |
Firebase Crashlytics |
Firebase Crashlytics esegue la rotazione dell'installazione di Crashlytics UUID basato sulle modifiche al Firebase dell'istanza di app l'ID installazione. In futuro, l'ID installazione può essere usato per attivare le funzionalità migliorare i servizi di segnalazione degli arresti anomali e gestione degli arresti anomali. |
Firebase In-App Messaging |
Firebase In-App Messaging usi Firebase ID di installazione per scegliere i dispositivi target per la consegna dei messaggi. |
Firebase Performance Monitoring |
Performance Monitoring utilizza Firebase ID installazione per calcolare il numero di installazioni Firebase univoche che accedono di risorse di rete, per garantire che i pattern di accesso sono sufficientemente anonimi. Utilizza anche Firebase ID installazione con Firebase Remote Config per gestire la frequenza dei report sugli eventi di rendimento. |
Firebase Remote Config |
Remote Config utilizza Firebase ID installazione per selezionare la configurazione da restituire ai dispositivi degli utenti finali. |
Firebase ML |
Credenziali chiamate di autenticazione dell'installazione vengono utilizzati da Firebase ML per autenticazione del dispositivo durante l'interazione con l'app ad esempio per distribuire i modelli di sviluppatore alle istanze di app. |
Firebase User Segmentation Storage |
Lo spazio di archiviazione per la segmentazione degli utenti di Firebase archivia Firebase ID installazione e i relativi attributi e segmenti per fornire informazioni sul targeting ad altri servizi Firebase che le usano. |
In genere, i servizi Firebase utilizzano il servizio di installazioni di Firebase senza che richiede agli sviluppatori di interagire direttamente con l'API FIS. Tuttavia, in alcuni casi gli sviluppatori di app potrebbero voler chiamare direttamente API FIS, ad esempio:
- Per eliminare un'installazione di Firebase e i dati associati all'installazione.
- Per recuperare gli identificatori (Firebase ID installazione) in modo da 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 delle installazioni di Firebase alla tua app
iOS+
- Aggiungi la dipendenza per le installazioni di Firebase al tuo Podfile:
pod 'FirebaseInstallations'
- Esegui
pod install
e apri il file.xcworkspace
creato. - Importa il modulo
FirebaseCore
nel tuoUIApplicationDelegate
e tutti gli altri Moduli Firebase utilizzati dal delegato della tua 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
FirebaseApp
nel delegato della tua applicazione Metodoapplication(_: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];
- Se utilizzi SwiftUI, devi creare un delegato dell'applicazione e collegarlo alla tua struct
App
tramiteUIApplicationDelegateAdaptor
oNSApplicationDelegateAdaptor
. Devi anche disattivare lo swizzling del delegato dell'app. Per Per ulteriori informazioni, consulta le istruzioni di SwiiftUI.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 delle installazioni Firebase al
file Gradle del modulo (a livello di app) (di solito app/build.gradle
):
implementation 'com.google.firebase:firebase-installations:18.0.0'
JavaScript
A seconda dell'hosting della tua applicazione web, la configurazione potrebbe gestiti automaticamente o potresti dover aggiornare Oggetto di configurazione Firebase.
Ad esempio, se le dipendenze vengono aggiunte in index.html, aggiungi il della dipendenza in <head> :
<script src="/__/firebase/10.13.1/firebase-installations.js"></script>
Flutter
Dalla directory root del tuo progetto Flutter, esegui questo per installare il plug-in di installazione di Firebase:
flutter pub add firebase_app_installations
Ricrea il progetto:
flutter run
Importa il plug-in di installazione di Firebase:
import 'package:firebase_app_installations/firebase_app_installations.dart';
Eliminare un'installazione di Firebase
I dati associati a un'installazione Firebase in genere non sono personali identificare. Tuttavia, può essere utile offrire agli utenti la possibilità di gestire ed eliminare questi dati.
Gli ID installazione di Firebase sono diversi per ogni installazione di ogni applicazione; le diverse applicazioni sullo stesso dispositivo hanno ID installazione di Firebase diversi. Firebase ID installazione identificano l'app di installazione e dati correlati le installazioni di app.
Quando elimini un ID installazione, i dati associati l'ID installazione viene rimosso dai sistemi in tempo reale e di backup di Servizi Firebase che utilizzano gli ID installazione di Firebase per identificare le installazioni entro 180 giorni. Questa procedura è descritta in modo generale nel documento dichiarazione di eliminazione e conservazione.
A meno che non disattivi tutti i servizi di generazione FID nel tuo dell'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 FID con una chiamata API client
Per eliminare i dati FID generati dai servizi Firebase: chiama il metodo appropriato dall'SDK delle installazioni 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+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();
Eliminare un FID con una chiamata API del server
Per eliminare un FID con una chiamata dell'API del server, aggiungi l'SDK Firebase Admin al tuo server, se non l'hai già fatto.
Una volta aggiunto l'SDK, elimina gli FID tramite una chiamata alla funzione di eliminazione nella lingua che preferisci (nota: a parte Node.js, questi metodi riflettono la denominazione dell'ID istanza. Tuttavia, eliminano tutti FID quando viene chiamato con un 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, Firebase avviano la procedura per eliminare i dati associati a quell'ID di installazione, interrompono accettare nuovi dati per tale ID nel corso di 1-2 giorni e poi inviare una notifica al app client che l'ID è stato eliminato. Fino a quando Firebase non invia una notifica all'app client, servizi dell'app potrebbero comunque avere come target l'ID, ad esempio un account Firebase l'installazione potrebbe continuare a ricevere notifiche di FCM per alcune nell'orario lavorativo locale del TAM.
Se vuoi eliminare l'ID installazione attuale di Firebase e usarlo immediatamente Servizi Firebase con un nuovo ID non correlato, utilizza l'API client per gestire l'eliminazione.
Recuperare gli identificatori dei client
Se hai la necessità di identificare determinate installazioni della tua app, può farlo recuperando l'ID installazione di Firebase. Ad esempio, per creare segmenti di installazioni di app per l'importazione BigQuery o per eseguire 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 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+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();
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 si progettano i test A/B, per Remote Config, puoi autenticare un dispositivo di test target utilizzando un token di autenticazione per l'installazione.
Un token di autenticazione per l'installazione è un token di connessione di breve durata in formato JWT (JSON Web Token) contenente le seguenti informazioni per un'installazione:
- L'ID installazione Firebase
- Il progetto associato (
projectNumber
) - ID applicazione Firebase associata (
appId
) - La data di scadenza del token
Il token di autenticazione per l'installazione non può essere revocato e rimane valido fino a e la relativa data di scadenza. La durata predefinita del token è una settimana.
Per recuperare un token di autenticazione per l'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+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();
Monitora il ciclo di vita dell'ID installazione di Firebase
Durante il normale funzionamento di un'app, Firebase ID installazione (FID) non richiedono un monitoraggio speciale. Tuttavia, le app che recuperano e utilizzano esplicitamente i dati FID aggiungi una logica per monitorare la potenziale eliminazione o rotazione del FID. Di seguito sono riportati alcuni casi in cui I dati FID possono essere eliminati o ruotati:
- Disinstallare o reinstallare l'app, ad esempio quando un utente finale vengono installate su un nuovo dispositivo.
- L'utente finale svuota la cache dell'app o del dispositivo.
- L'eliminazione dei dati FID viene attivata nel backend a causa dell'app (attualmente la soglia di inattività è di 270 giorni).
Quando le app riscontrano la rotazione o l'eliminazione FID in questi casi, viene loro assegnato un nuovo FID. Inoltre, il token di autenticazione per l'installazione associato a un FID eliminato venga eliminata indipendentemente dalla sua maturità, ed è sostituita da una nuova il token di autenticazione per l'installazione.
Le app possono monitorare questi cambiamenti e reagire di conseguenza.
Per monitorare la rotazione dell'ID utente:
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]; }];
Una NSNotification denominata NSNotificationName.InstallationIDDidChange
è
pubblicato nel NSNotificationCenter predefinito ogni volta che viene
FID assegnato.
Android
I client Kotlin e Java devono aggiungere la logica per i nuovi tentativi 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, il callback a cui hai effettuato l'iscrizione viene attivato:
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 a Firebase installazione
Prima dell'introduzione delle installazioni di Firebase, Firebase si affidava a SDK ID istanza per gli identificatori delle installazioni di app. Firebase installazione offre vantaggi significativi rispetto all'ID istanza in termini di affidabilità, prestazioni e sicurezza. È necessario eseguire la migrazione delle app Firebase che dipendono dall'SDK dell'ID istanza a Firebase installazioni.
Il processo di migrazione varia a seconda dell'app:
La migrazione delle app che non richiamano direttamente le API ID istanza può 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 apporta modifiche al codice per sostituire l'ID istanza con i loro Firebase installazioni o FCM equivalenti. Se la tua app utilizza ID istanza per recuperare i token di registrazione FCM o utilizzarne esplicitamente l'utilizzo ID istanza per scegliere come target le istanze di app o per qualsiasi altro scopo, dovrai aggiornare il codice dell'applicazione.
FIS è compatibile con le versioni precedenti dell'ID istanza Firebase dell'identificatore legacy. 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 per Android precedenti al 27 febbraio 2020
Ciò significa che non è necessario eseguire la migrazione delle app alle installazioni di Firebase. tuttavia, consigliamo vivamente di farlo.
Upgrade alle versioni minime dell'SDK per Firebase installazioni
Per eseguire la migrazione dalle installazioni di Instance ID a quelle di Firebase, assicurati che le tue applicazioni utilizzino almeno i numeri di versione minima elencati dei seguenti SDK Firebase:
SDK Firebase | Versione minima di Android | Versione iOS minima |
Firebase Cloud Messaging | Versione 20.3.0 | Versione 6.34.0 |
Remote Config | Versione 19.2.0 | Versione 6.24.0 |
Google Analytics per Firebase \ (SDK Measurement) | Versione 17.4.4 | Versione 6.18.0 |
Messaggistica in-app | v19.0.7 | Versione 6.24.0 |
Performance Monitoring | Versione 19.0.8 | v6.21.0 |
Crashlytics | Versione 17.2.1 | v6.23.0 |
ML Kit | Versione 22.1.2 | Versione 6.28.0 |
Aggiornamento del codice che chiama esplicitamente le API ID istanza
Se la tua app per Android o Apple utilizza direttamente metodi SDK ID istanza, sostituire tale utilizzo con alternative identiche nelle installazioni Firebase SDK o l'SDK FCM.
Recupero di un identificatore
I metodi per ottenere gli ID istanza vengono sostituiti con metodi per ottenere un'installazione ID. 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)") 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) }
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+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") } }
Eliminazione di un identificatore
I metodi per eliminare gli ID istanza vengono sostituiti con quelli per l'eliminazione Firebase ID installazione. 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+KTX
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 in corso...
Prima dell'introduzione delle installazioni di Firebase, FCM client recuperato 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+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; } }];
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+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; } }];