Il servizio di installazione di Firebase (FIS) fornisce un ID di installazione di Firebase (FID) per ogni istanza installata di un'app Firebase. L'ID di installazione di Firebase viene utilizzato internamente da questi servizi Firebase:
Servizio FireBase | Funzionalità di installazione di Firebase |
---|---|
Messaggeria cloud Firebase | Firebase Cloud Messaging utilizza gli ID di installazione di Firebase per indirizzare i dispositivi 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 di Firebase dell'istanza dell'app. In futuro, l'ID di installazione potrà essere utilizzato per abilitare funzionalità che migliorano i servizi di segnalazione e gestione degli arresti anomali. |
Messaggi in-app di Firebase | La messaggistica in-app di Firebase utilizza gli ID di installazione di Firebase per indirizzare i dispositivi per la consegna dei messaggi. |
Monitoraggio delle prestazioni di Firebase | Il monitoraggio delle prestazioni 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 modelli di accesso siano sufficientemente anonimi. Utilizza anche gli ID di installazione di Firebase con Firebase Remote Config per gestire la frequenza dei rapporti sugli eventi relativi alle prestazioni. |
Configurazione remota Firebase | Remote Config utilizza gli ID di installazione di Firebase per selezionare i valori di configurazione da restituire ai dispositivi degli utenti finali. |
Base di fuoco ML | Le credenziali denominate token di autenticazione dell'installazione vengono utilizzate da Firebase ML per l'autenticazione del dispositivo durante l'interazione con le istanze dell'app, ad esempio per distribuire i modelli degli sviluppatori alle istanze dell'app. |
Archiviazione segmentazione utenti Firebase | Firebase User Segmentation Storage memorizza gli ID di installazione Firebase e i relativi attributi e segmenti per fornire informazioni di targeting ad altri servizi Firebase che li utilizzano. |
In genere, i servizi Firebase utilizzano il servizio di installazione Firebase senza richiedere agli sviluppatori di interagire direttamente con l'API FIS. Tuttavia, ci sono casi in cui gli sviluppatori di app potrebbero voler chiamare direttamente l'API FIS, ad esempio:
- Per eliminare un'installazione Firebase e i dati legati all'installazione.
- Recuperare gli identificatori (ID di installazione Firebase) per indirizzare 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 per le installazioni di Firebase alla tua app
iOS+
- Aggiungi la dipendenza per le installazioni Firebase al tuo Podfile:
pod 'FirebaseInstallations'
- Esegui
pod install
e apri il file.xcworkspace
creato. - Importa il modulo
FirebaseCore
nel tuoUIApplicationDelegate
, così come qualsiasi altro modulo Firebase utilizzato dal delegato dell'app. Ad esempio, per utilizzare Cloud Firestore e l'autenticazione:SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Rapido
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Obiettivo-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- Configura un'istanza condivisa
FirebaseApp
nel metodoapplication(_:didFinishLaunchingWithOptions:)
del delegato dell'app:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Rapido
// Use Firebase library to configure APIs FirebaseApp.configure()
Obiettivo-C
// Use Firebase library to configure APIs [FIRApp configure];
- Se utilizzi SwiftUI, devi creare un delegato dell'applicazione e allegarlo alla struttura
App
tramiteUIApplicationDelegateAdaptor
oNSApplicationDelegateAdaptor
. È inoltre necessario disabilitare lo scorrimento del delegato dell'app. Per ulteriori informazioni, consulta le istruzioni SwiftUI .SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
Androide
Aggiungi la dipendenza per le installazioni di Firebase Android SDK al file Gradle del tuo modulo (a livello di app) (in genere app/build.gradle
):
implementation 'com.google.firebase:firebase-installations:17.1.3'
javascript
A seconda di come è ospitata la tua applicazione web, la tua configurazione potrebbe essere gestita automaticamente o potrebbe essere necessario aggiornare il tuo oggetto di configurazione Firebase .
Ad esempio, se le tue dipendenze vengono aggiunte in index.html, aggiungi la dipendenza nell'elemento <head>:
<script src="/__/firebase/9.22.1/firebase-installations.js"></script>
Svolazzare
Dalla directory principale del tuo progetto Flutter, esegui il comando seguente per installare il plug-in di installazione di Firebase:
flutter pub add firebase_app_installations
Ricostruisci il tuo progetto:
flutter run
Importa il plug-in di installazione di Firebase:
import 'package:firebase_app_installations/firebase_app_installations.dart';
Elimina un'installazione di Firebase
I dati legati a un'installazione Firebase generalmente non identificano personalmente. Tuttavia, può essere utile offrire agli utenti un'opzione per gestire ed eliminare questi dati.
Gli ID di installazione di Firebase sono diversi per ogni installazione di ogni applicazione; applicazioni diverse sullo stesso dispositivo hanno ID di installazione Firebase diversi. Gli ID di installazione di Firebase identificano le installazioni di app e i dati legati a tali installazioni di app.
Quando elimini un ID di installazione, i dati associati a tale ID di installazione vengono rimossi dai sistemi live e di backup di tutti i servizi Firebase che utilizzano gli ID di installazione Firebase per identificare le installazioni entro 180 giorni. Questo processo è descritto ad alto livello nella dichiarazione di Google sull'eliminazione e la conservazione .
A meno che non disabiliti tutti i servizi di generazione di 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 FID con una chiamata API client
Per eliminare i FID generati dai servizi Firebase, chiama il metodo appropriato dall'SDK delle installazioni Firebase:
Rapido
Installations.installations().delete { error in if let error = error { print("Error deleting installation: \(error)") return } print("Installation deleted"); }
Obiettivo-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();
Elimina un FID con una chiamata API del server
Per eliminare un FID con una chiamata API del 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 nella tua lingua preferita (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 Firebase corrente 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();
Pitone
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)
Andare
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 di installazione Firebase con una chiamata API del server, i servizi Firebase avviano il processo per eliminare i dati legati a quell'ID di installazione, smettono di accettare nuovi dati per quell'ID nel corso di 1-2 giorni e quindi notificano l'app client che l'ID è stato cancellato. Fino a quando Firebase non notifica all'app client, alcuni dei servizi dell'app potrebbero ancora scegliere come target l'ID, ad esempio un'installazione di Firebase potrebbe continuare a ricevere notifiche FCM per alcune ore.
Se desideri eliminare l'ID di 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 del client
Se hai la necessità di identificare particolari installazioni della tua app, puoi farlo recuperando l'ID di installazione di Firebase. Ad esempio, per eseguire test durante lo sviluppo della messaggistica in-app di Firebase, puoi identificare e indirizzare il dispositivo di test corretto utilizzando il suo ID di installazione Firebase.
Per recuperare un ID di installazione Firebase:
Rapido
Installations.installations().installationID { (id, error) in if let error = error { print("Error fetching id: \(error)") return } guard let id = id else { return } print("Installation ID: \(id)") }
Obiettivo-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 Firebase con i token di autenticazione recuperati da FIS. Ad esempio, quando si progettano test A/B per Remote Config, è possibile autenticare un dispositivo di test mirato utilizzando un token di autenticazione dell'installazione.
Un token di autenticazione dell'installazione è un token al portatore di breve durata in formato token Web JSON (JWT) contenente le seguenti informazioni per un'installazione:
- L'ID di installazione di 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:
Rapido
Installations.installations().authTokenForcingRefresh(true, completion: { (result, error) in if let error = error { print("Error fetching token: \(error)") return } guard let result = result else { return } print("Installation auth token: \(result.authToken)") })
Obiettivo-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 di installazione di Firebase
Durante il normale funzionamento di un'app, gli ID di installazione (FID) di Firebase non richiedono un monitoraggio speciale. Tuttavia, le app che recuperano e usano in modo esplicito i FID devono aggiungere logica per monitorare la potenziale eliminazione o rotazione del FID. Ecco alcuni casi in cui i FID potrebbero essere eliminati o ruotati:
- Disinstallazione o reinstallazione dell'app, ad esempio quando un utente finale installa su un nuovo dispositivo.
- L'utente finale cancella la cache dell'app o del dispositivo.
- L'eliminazione del FID viene attivata nel back-end a causa dell'inattività dell'app (attualmente la soglia per questo è di 270 giorni di inattività).
Quando le app sperimentano la rotazione o l'eliminazione del FID in questi tipi di casi, viene assegnato 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 questi cambiamenti e rispondere di conseguenza.
Per monitorare la rotazione FID:
Rapido
installationIDObserver = NotificationCenter.default.addObserver( forName: .InstallationIDDidChange, object: nil, queue: nil ) { (notification) in // Fetch new Installation ID self.fetchInstallationToken() }
Obiettivo-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
viene inviata al NSNotificationCenter predefinito ogni volta che viene assegnato un nuovo FID.
Androide
I client Kotlin e Java dovrebbero aggiungere la logica dei tentativi per rispondere alle chiamate non riuscite per recuperare il nuovo FID.
javascript
Le app Web possono sottoscrivere l'hook onIdChange
.
Ogni volta che viene creato un nuovo FID, viene attivata la richiamata sottoscritta:
await firebase.installations().onIdChange((newId) => { console.log(newId); // TODO: Handle new installation ID. });
Dart
FirebaseInstallations.instance.onIdChange.listen((token) {
print('FID token: $token');
});
Migrazione da ID istanza alle installazioni Firebase
Prima dell'introduzione delle installazioni di Firebase, Firebase faceva affidamento sull'SDK ID istanza per gli identificatori delle installazioni di app. Le installazioni di Firebase offrono vantaggi significativi rispetto a Instance ID in termini di affidabilità, prestazioni e sicurezza. Le app Firebase che dipendono dall'SDK ID istanza devono eseguire la migrazione alle installazioni Firebase.
Il processo di migrazione è diverso in base alla tua app:
Le app che non chiamano direttamente le API di Instance ID possono eseguire la migrazione aggiornando le rispettive 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 ID istanza con le relative installazioni Firebase o equivalenti FCM. Se la tua app utilizza l'ID istanza per recuperare i token di registrazione FCM o utilizza esplicitamente l'ID istanza per indirizzare le istanze dell'app o per qualsiasi altro scopo, dovrai aggiornare il codice dell'applicazione.
Attualmente, FIS è retrocompatibile con l'identificatore legacy Firebase Instance ID. 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 è necessario che le app eseguano la migrazione alle installazioni Firebase; tuttavia, farlo è altamente raccomandato.
Aggiornamento alle versioni minime dell'SDK per le installazioni di Firebase
Per eseguire la migrazione dall'ID istanza alle installazioni 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 iOS minima |
Messaggeria cloud Firebase | v20.3.0 | v6.34.0 |
Configurazione remota | v19.2.0 | v6.24.0 |
Google Analytics per Firebase \ (SDK di misurazione) | v17.4.4 | v6.18.0 |
Messaggi in-app | v19.0.7 | v6.24.0 |
Monitoraggio delle prestazioni | v19.0.8 | v6.21.0 |
Crashlytics | v17.2.1 | v6.23.0 |
Kit ML | v22.1.2 | v6.28.0 |
Aggiornamento del codice che chiama in modo esplicito le API ID istanza
Se la tua app Android o Apple utilizza direttamente i metodi dell'SDK ID istanza, puoi sostituire tale utilizzo con alternative identiche nell'SDK per le installazioni Firebase o nell'SDK FCM.
Recupero di un identificatore
I metodi per ottenere gli ID istanza vengono sostituiti con i metodi per ottenere un ID di installazione. Per esempio:
Prima
Rapido
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)" } }
Obiettivo-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
Rapido
Installations.installations().installationID { (id, error) in if let error = error { print("Error fetching id: \(error)") return } guard let id = id else { return } print("Installation ID: \(id)") }
Obiettivo-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 i metodi per eliminare gli ID di installazione di Firebase. Per esempio:
Prima
Rapido
InstanceID.instanceID().deleteID { error in
if let error = error {
print("Error deleting instance ID: \(error)")
}
}
Obiettivo-C
[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
if error != nil {
NSLog(@"Error deleting instance ID: %@", error);
}
}];
Androide
FirebaseInstanceId.deleteInstanceId();
Dopo
Rapido
func delete(completion: @escaping (Error?) -> Void)
Obiettivo-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
Prima dell'introduzione delle installazioni Firebase, i client FCM recuperavano i token di registrazione dall'ID istanza. Ora, FCM SDK 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() })
Rapido
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)" } }
Obiettivo-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() })
Rapido
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)" } }
Obiettivo-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; } }];