Le service d'installation Firebase (FIS) fournit un ID d'installation Firebase (FID) pour chaque instance installée d'une application Firebase. L'ID d'installation Firebase est utilisé en interne par ces services Firebase :
Service Firebase | Fonctionnalité d'installation de Firebase |
---|---|
Messagerie cloud Firebase | Firebase Cloud Messaging utilise les ID d'installation Firebase pour cibler les appareils pour la livraison des messages. |
Firebase Crashlytics | Firebase Crashlytics alterne l'UUID d'installation de Crashlytics en fonction des modifications apportées à l'ID d'installation Firebase de l'instance d'application. À l’avenir, l’ID d’installation pourra être utilisé pour activer des fonctionnalités qui améliorent les services de rapport d’incidents et de gestion des accidents. |
Messagerie intégrée à l'application Firebase | La messagerie Firebase In-App utilise les ID d'installation Firebase pour cibler les appareils pour la livraison des messages. |
Surveillance des performances de Firebase | La surveillance des performances utilise les ID d'installation Firebase pour calculer le nombre d'installations Firebase uniques qui accèdent aux ressources réseau, afin de garantir que les modèles d'accès sont suffisamment anonymes. Il utilise également les ID d'installation Firebase avec Firebase Remote Config pour gérer le taux de reporting des événements de performances. |
Configuration à distance Firebase | Remote Config utilise les ID d'installation Firebase pour sélectionner les valeurs de configuration à renvoyer aux appareils des utilisateurs finaux. |
Firebase ML | Les informations d'identification appelées jetons d'authentification d'installation sont utilisées par Firebase ML pour l'authentification des appareils lors de l'interaction avec des instances d'application, par exemple pour distribuer des modèles de développeur aux instances d'application. |
Stockage de segmentation des utilisateurs Firebase | Le stockage de segmentation utilisateur Firebase stocke les ID d'installation Firebase ainsi que les attributs et segments associés pour fournir des informations de ciblage aux autres services Firebase qui les utilisent. |
En règle générale, les services Firebase utilisent le service d'installation Firebase sans obliger les développeurs à interagir directement avec l'API FIS. Cependant, il existe des cas où les développeurs d'applications peuvent souhaiter appeler directement l'API FIS, tels que :
- Pour supprimer une installation Firebase et les données liées à l'installation.
- Pour récupérer des identifiants (ID d'installation Firebase) afin de cibler des installations d'applications spécifiques.
- Pour récupérer les jetons d'authentification d'installation afin d'authentifier les installations Firebase.
Pour commencer à appeler directement l'API FIS, ajoutez le SDK à votre application.
Ajoutez le SDK d'installations Firebase à votre application
iOS+
- Ajoutez la dépendance pour les installations Firebase à votre Podfile :
pod 'FirebaseInstallations'
- Exécutez
pod install
et ouvrez le fichier.xcworkspace
créé. - Importez le module
FirebaseCore
dans votreUIApplicationDelegate
, ainsi que tous les autres modules Firebase utilisés par votre délégué d'application. Par exemple, pour utiliser Cloud Firestore et l'authentification :SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Rapide
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Objectif c
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- Configurez une instance partagée
FirebaseApp
dans la méthodeapplication(_:didFinishLaunchingWithOptions:)
de votre délégué d'application :SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Rapide
// Use Firebase library to configure APIs FirebaseApp.configure()
Objectif c
// Use Firebase library to configure APIs [FIRApp configure];
- Si vous utilisez SwiftUI, vous devez créer un délégué d'application et l'attacher à votre structure
App
viaUIApplicationDelegateAdaptor
ouNSApplicationDelegateAdaptor
. Vous devez également désactiver le swizzling des délégués d’application. Pour plus d'informations, consultez les instructions 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
Ajoutez la dépendance du SDK Android des installations Firebase au fichier Gradle de votre module (au niveau de l'application) (généralement app/build.gradle
) :
implementation 'com.google.firebase:firebase-installations:17.1.4'
Javascript
Selon la manière dont votre application Web est hébergée, votre configuration peut être gérée automatiquement ou vous devrez peut-être mettre à jour votre objet de configuration Firebase .
Par exemple, si vos dépendances sont ajoutées dans index.html, ajoutez la dépendance dans l'élément <head> :
<script src="/__/firebase/10.4.0/firebase-installations.js"></script>
Battement
Depuis le répertoire racine de votre projet Flutter, exécutez la commande suivante pour installer le plugin d'installation Firebase :
flutter pub add firebase_app_installations
Reconstruisez votre projet :
flutter run
Importez le plugin d'installation Firebase :
import 'package:firebase_app_installations/firebase_app_installations.dart';
Supprimer une installation Firebase
Les données liées à une installation Firebase ne permettent généralement pas d'identifier personnellement. Néanmoins, il peut être utile de donner aux utilisateurs la possibilité de gérer et de supprimer ces données.
Les ID d'installation de Firebase sont différents pour chaque installation de chaque application ; différentes applications sur le même appareil ont des ID d'installation Firebase différents. Les ID d'installation Firebase identifient les installations d'applications et les données liées à ces installations d'applications.
Lorsque vous supprimez un ID d'installation, les données liées à cet ID d'installation sont supprimées des systèmes actifs et de sauvegarde de tous les services Firebase qui utilisent les ID d'installation Firebase pour identifier les installations dans un délai de 180 jours. Ce processus est décrit en détail dans la déclaration de Google sur la suppression et la conservation .
Sauf si vous désactivez tous les services générateurs de FID dans votre application, FIS crée un nouvel identifiant en quelques jours. Firebase considère l'ID nouvellement créé comme une nouvelle installation Firebase et ne l'associe en aucun cas à l'ID ou aux données précédentes.
Supprimer un FID avec un appel d'API client
Pour supprimer les FID générés par les services Firebase, appelez la méthode appropriée à partir du SDK d'installation Firebase :
Rapide
Installations.installations().delete { error in if let error = error { print("Error deleting installation: \(error)") return } print("Installation deleted"); }
Objectif 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();
Supprimer un FID avec un appel API serveur
Pour supprimer un FID avec un appel d'API de serveur, ajoutez le SDK d'administration Firebase à votre serveur , si ce n'est pas déjà fait.
Une fois le SDK ajouté, supprimez les FID via un appel à la fonction de suppression dans la langue de votre choix (remarque : à l'exception de Node.js, ces méthodes reflètent le nom de l'ID d'instance. Cependant, elles suppriment toutes le FID lorsqu'elles sont appelées avec n'importe quel Firebase actuel. SDK).
Noeud.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)
Aller
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)
}
Lorsque vous supprimez un ID d'installation Firebase avec un appel d'API de serveur, les services Firebase démarrent le processus de suppression des données liées à cet ID d'installation, cessent d'accepter de nouvelles données pour cet ID au cours d'une période d'un à deux jours, puis informent l'application client. que l'identifiant a été supprimé. Jusqu'à ce que Firebase notifie l'application client, certains services de l'application peuvent toujours cibler l'ID : par exemple, une installation Firebase peut continuer à recevoir des notifications FCM pendant quelques heures.
Si vous souhaitez supprimer l'ID d'installation Firebase actuel et utiliser immédiatement les services Firebase avec un nouvel ID sans rapport, utilisez l'API client pour gérer la suppression.
Récupérer les identifiants des clients
Si vous devez identifier des installations particulières de votre application, vous pouvez le faire en récupérant l'ID d'installation de Firebase. Par exemple, pour créer des segments d'installations d'applications pour l'importation BiqQuery ou pour effectuer des tests pendant le développement de la messagerie Firebase In-App, vous pouvez identifier et cibler les appareils appropriés à l'aide des ID d'installation Firebase correspondants.
Pour récupérer un ID d'installation Firebase :
Rapide
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)") }
Objectif 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();
Récupérer les jetons d'authentification d'installation
Les services Firebase peuvent authentifier les installations Firebase avec des jetons d'authentification récupérés du FIS. Par exemple, lors de la conception de tests A/B pour Remote Config, vous pouvez authentifier un appareil de test ciblé à l'aide d'un jeton d'authentification d'installation.
Un jeton d'authentification d'installation est un jeton de support de courte durée au format de jeton Web JSON (JWT) contenant les informations suivantes pour une installation :
- L'ID d'installation de Firebase
- Le projet associé (
projectNumber
) - L'ID de l'application Firebase associée (
appId
) - La date d'expiration du token
Un jeton d'authentification d'installation ne peut pas être révoqué et reste valide jusqu'à sa date d'expiration. La durée de vie par défaut du jeton est d'une semaine.
Pour récupérer un jeton d'authentification d'installation :
Rapide
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)") })
Objectif 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();
Surveiller le cycle de vie de l'ID d'installation Firebase
Pendant le fonctionnement normal d'une application, les ID d'installation (FID) Firebase ne nécessitent pas de surveillance particulière. Cependant, les applications qui récupèrent et utilisent explicitement les FID doivent ajouter une logique pour surveiller la suppression ou la rotation potentielle du FID. Voici quelques cas dans lesquels les FID peuvent être supprimés ou alternés :
- Désinstallation ou réinstallation de l'application, par exemple lorsqu'un utilisateur final l'installe sur un nouvel appareil.
- L'utilisateur final efface le cache de l'application ou de l'appareil.
- La suppression du FID est déclenchée dans le backend en raison de l'inactivité de l'application (actuellement, le seuil pour cela est de 270 jours d'inactivité).
Lorsque les applications subissent une rotation ou une suppression de FID dans ce type de cas, un nouveau FID leur est attribué. De plus, le jeton d'authentification d'installation associé à un FID supprimé est supprimé, quelle que soit sa propre maturité, et est remplacé par un nouveau jeton d'authentification d'installation.
Les applications peuvent surveiller ces changements et réagir en conséquence.
Pour surveiller la rotation du FID :
Rapide
installationIDObserver = NotificationCenter.default.addObserver( forName: .InstallationIDDidChange, object: nil, queue: nil ) { (notification) in // Fetch new Installation ID self.fetchInstallationToken() }
Objectif 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 nommé NSNotificationName.InstallationIDDidChange
est publié dans le NSNotificationCenter par défaut chaque fois qu'un nouveau FID est attribué.
Android
Les clients Kotlin et Java doivent ajouter une logique de nouvelle tentative pour répondre aux appels ayant échoué afin de récupérer le nouveau FID.
Javascript
Les applications Web peuvent s'abonner au hook onIdChange
.
Chaque fois qu'un nouveau FID est créé, le rappel souscrit est déclenché :
await firebase.installations().onIdChange((newId) => { console.log(newId); // TODO: Handle new installation ID. });
Dart
FirebaseInstallations.instance.onIdChange.listen((token) {
print('FID token: $token');
});
Migrer depuis l'ID d'instance vers les installations Firebase
Avant l'introduction des installations Firebase, Firebase s'appuyait sur le SDK Instance ID pour les identifiants des installations d'applications. Les installations Firebase offrent des avantages significatifs par rapport à Instance ID en termes de fiabilité, de performances et de sécurité. Les applications Firebase qui dépendent du SDK Instance ID doivent migrer vers les installations Firebase.
Le processus de migration est différent en fonction de votre application :
Les applications qui n'appellent pas directement les API Instance ID peuvent migrer en mettant à jour leurs versions SDK . La plupart des applications Firebase entrent dans cette catégorie.
Les applications qui effectuent explicitement des appels d'API à Instance ID doivent mettre à jour les versions du SDK et apporter des modifications au code pour remplacer les méthodes Instance ID par leurs installations Firebase ou leurs équivalents FCM. Si votre application utilise l'ID d'instance pour récupérer les jetons d'enregistrement FCM ou utilise explicitement l'ID d'instance pour cibler des instances d'application ou à toute autre fin, vous devrez mettre à jour le code de votre application.
Actuellement, FIS est rétrocompatible avec l'ancien identifiant Firebase Instance ID. La suppression d'un IID est une méthode alternative pour demander la suppression de données avec ces SDK Firebase :
- iOS 6.14.0 et versions antérieures
- SDK Android antérieurs au 27 février 2020
Cela signifie que les applications ne sont pas obligées de migrer vers des installations Firebase ; cependant, cela est fortement recommandé.
Mise à niveau vers les versions minimales du SDK pour les installations Firebase
Pour migrer d'une installation Instance ID vers Firebase, assurez-vous que vos applications utilisent au moins les numéros de version minimum répertoriés des SDK Firebase suivants :
SDK Firebase | Version minimale d'Android | Version iOS minimale |
Messagerie cloud Firebase | v20.3.0 | v6.34.0 |
Configuration à distance | v19.2.0 | v6.24.0 |
Google Analytics pour Firebase \ (SDK de mesure) | v17.4.4 | v6.18.0 |
Messagerie intégrée à l'application | v19.0.7 | v6.24.0 |
Suivi de la performance | v19.0.8 | v6.21.0 |
Crashlytiques | v17.2.1 | v6.23.0 |
Trousse ML | v22.1.2 | v6.28.0 |
Mettre à jour le code qui appelle explicitement les API d'ID d'instance
Si votre application Android ou Apple utilise directement les méthodes du SDK Instance ID, vous pouvez remplacer cette utilisation par des alternatives identiques dans le SDK d'installation Firebase ou le SDK FCM.
Récupérer un identifiant
Les méthodes permettant d'obtenir des ID d'instance sont remplacées par des méthodes permettant d'obtenir un ID d'installation. Par exemple:
Avant
Rapide
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)" } }
Objectif 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) }
Après
Rapide
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)") }
Objectif 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") } }
Supprimer un identifiant
Les méthodes permettant de supprimer les ID d'instance sont remplacées par des méthodes permettant de supprimer les ID d'installation Firebase. Par exemple:
Avant
Rapide
InstanceID.instanceID().deleteID { error in
if let error = error {
print("Error deleting instance ID: \(error)")
}
}
Objectif c
[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
if error != nil {
NSLog(@"Error deleting instance ID: %@", error);
}
}];
Android
FirebaseInstanceId.deleteInstanceId();
Après
Rapide
func delete(completion: @escaping (Error?) -> Void)
Objectif 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") } }
Récupération d'un jeton d'enregistrement FCM
Avant l'introduction des installations Firebase, les clients FCM récupéraient les jetons d'enregistrement à partir de l'ID d'instance. Désormais, le SDK FCM fournit des méthodes pour récupérer le jeton d'enregistrement.
Avant
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() })
Rapide
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)" } }
Objectif 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; } }];
Après
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() })
Rapide
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)" } }
Objectif 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; } }];