Le service d'installations 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 les services Firebase suivants :
| Service Firebase | Fonctionnalité des installations Firebase |
|---|---|
| Firebase Cloud Messaging |
Firebase Cloud Messaging utilise les ID d'installation Firebase pour cibler les appareils pour la diffusion des messages. |
| Firebase Crashlytics |
Firebase Crashlytics fait pivoter l'UUID d'installation 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 gestion et de signalement des plantages. |
| Firebase In-App Messaging |
Firebase In-App Messaging utilise les ID d'installation Firebase pour cibler les appareils pour la diffusion des messages. |
| Firebase Performance Monitoring |
Performance Monitoring utilise les ID d'installation Firebase pour calculer le nombre d'installations Firebase uniques qui accèdent aux ressources réseau, afin de s'assurer que les schémas d'accès sont suffisamment anonymes. Il utilise également les ID d'installation Firebase avec Firebase Remote Config pour gérer le taux de création de rapports sur les événements de performances. |
| Firebase Remote Config |
Remote Config utilise les ID d'installation Firebase pour sélectionner les valeurs de configuration à renvoyer aux appareils des utilisateurs finaux. |
| Firebase ML |
Les identifiants appelés jetons d'authentification de l'installation sont utilisés par Firebase ML pour l'authentification des appareils lors de l'interaction avec les 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 la segmentation des utilisateurs Firebase stocke les ID d'installation Firebase, ainsi que les attributs et segments associés, afin de fournir des informations de ciblage à d'autres services Firebase qui les utilisent. |
En règle générale, les services Firebase utilisent le service d'installations Firebase sans que les développeurs aient besoin d'interagir directement avec l'API FIS. Toutefois, il existe des cas où les développeurs d'applications peuvent souhaiter appeler directement l'API FIS, par exemple :
- Pour supprimer une installation Firebase et les données qui y sont associées.
- 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 de l'installation afin d'authentifier les installations Firebase.
Pour commencer à appeler directement l'API FIS, ajoutez le SDK à votre application.
Ajoutez le SDK Firebase à votre application.
iOS+
- Ajoutez la dépendance pour les installations Firebase à votre fichier Podfile :
pod 'FirebaseInstallations'
- Exécutez
pod installet ouvrez le fichier.xcworkspacecréé. - Importez le module
FirebaseCoredans votreUIApplicationDelegate, ainsi que tous les autres modules Firebase utilisés par le délégué de votre application. Par exemple, pour utiliser Cloud Firestore et 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; // ...
- Configurez une instance partagée
FirebaseAppdans la méthodeapplication(_:didFinishLaunchingWithOptions:)du délégué de votre application :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];
- Si vous utilisez SwiftUI, vous devez créer un délégué d'application et l'associer à votre structure
AppviaUIApplicationDelegateAdaptorouNSApplicationDelegateAdaptor. Vous devez également désactiver le swizzling du délégué d'application. Pour en savoir plus, 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 pour le SDK Android Firebase Installations au fichier Gradle (généralement app/build.gradle) de votre module (au niveau de l'application) :
implementation 'com.google.firebase:firebase-installations:19.1.0'
JavaScript
Selon la façon 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/12.12.0/firebase-installations.js"></script>
Flutter
À partir du répertoire racine de votre projet Flutter, exécutez la commande suivante pour installer le plug-in d'installations Firebase :
flutter pub add firebase_app_installationsRecréez votre projet :
flutter runImportez le plug-in d'installations Firebase :
import 'package:firebase_app_installations/firebase_app_installations.dart';
Supprimer une installation Firebase
Les données associées à une installation Firebase ne permettent généralement pas d'identifier personnellement l'utilisateur. Toutefois, il peut être utile de donner aux utilisateurs la possibilité de gérer et de supprimer ces données.
Les ID d'installation Firebase sont différents pour chaque installation de chaque application. Les applications différentes 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 qui y sont associées.
Lorsque vous supprimez un ID d'installation, les données qui y sont associées sont supprimées des systèmes actifs et de sauvegarde de tous les services Firebase qui utilisent des ID d'installation Firebase pour identifier les installations dans un délai de 180 jours. Ce processus est décrit de manière générale dans la déclaration de Google concernant la suppression et la conservation des données.
À moins que vous ne désactiviez tous les services générant des FID dans votre application, FIS crée un nouvel ID sous quelques jours. Firebase considère que l'ID nouvellement créé est une nouvelle installation Firebase et ne l'associe en aucun cas à l'ID ou aux données précédents.
Supprimer un FID avec un appel d'API client
Pour supprimer les FIDs générés par les services Firebase, appelez la méthode appropriée à partir du SDK d'installations 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();
Supprimer un FID avec un appel d'API serveur
Pour supprimer un FID avec un appel d'API serveur, ajoutez le SDK Admin Firebase à votre serveur, si ce n'est pas déjà fait.
Une fois le SDK ajouté, supprimez les FIDs en appelant la fonction de suppression dans le langage de votre choix (remarque : à l'exception de Node.js, ces méthodes reflètent la dénomination des ID d'instance. Toutefois, elles suppriment toutes le FID lorsqu'elles sont appelées avec un SDK Firebase actuel.
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)
Accéder
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 serveur, les services Firebase lancent le processus de suppression des données associées à cet ID d'installation, cessent d'accepter de nouvelles données pour cet ID pendant un à deux jours, puis informent l'application cliente que l'ID a été supprimé. Tant que Firebase n'a pas notifié l'application cliente, il est possible que certains services de l'application ciblent toujours 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 non associé, utilisez l'API client pour gérer la suppression.
Récupérer les identifiants client
Si vous devez identifier des installations spécifiques de votre application, vous pouvez le faire en récupérant l'ID d'installation Firebase. Par exemple, pour créer des segments d'installations d'applications pour l'importation BigQuery ou pour effectuer des tests pendant le développement Firebase In-App Messaging, 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 :
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();
Récupérer les jetons d'authentification de l'installation
Les services Firebase peuvent authentifier les installations Firebase avec des jetons d'authentification récupérés à partir de FIS. Par exemple, lorsque vous concevez des 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 JSON Web Token (JWT) contenant les informations suivantes pour une installation :
- ID d'installation Firebase
- Projet associé (
projectNumber) - ID de l'application Firebase associée (
appId) - Date d'expiration du jeton
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 :
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();
Surveiller le cycle de vie de l'ID d'installation Firebase
Lors du fonctionnement normal d'une application, les ID d'installation Firebase (FIDs) ne nécessitent pas de surveillance particulière. Toutefois, les applications qui récupèrent et utilisent explicitement des FID doivent ajouter une logique pour surveiller la suppression ou la rotation potentielles du FID. Voici quelques cas où les FID peuvent être supprimés ou modifiés :
- Désinstallation ou réinstallation de l'application, par exemple lorsqu'un utilisateur final l'installe sur un nouvel appareil.
- L'utilisateur final vide 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 (le seuil actuel est de 270 jours d'inactivité).
Lorsqu'une application subit une rotation ou une suppression de son FID dans ces types de cas, un nouveau FID lui est attribué. De plus, le jeton d'authentification de l'installation associé à un FID supprimé est supprimé, quelle que soit sa propre maturité, et remplacé par un nouveau jeton d'authentification de l'installation.
Les applications peuvent surveiller ces modifications et y répondre en conséquence.
Pour surveiller la rotation des FID :
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]; }];
Une NSNotification nommée NSNotificationName.InstallationIDDidChange est publiée 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 auquel il est abonné 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 d'Instance ID 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 considérables par rapport à l'ID d'instance 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 varie selon votre application :
Les applications qui n'appellent pas directement les API Instance ID peuvent migrer en mettant à jour leurs versions de SDK. La plupart des applications Firebase appartiennent à cette catégorie.
Les applications qui effectuent explicitement des appels d'API à l'ID d'instance doivent mettre à jour les versions du SDK et modifier le code pour remplacer les méthodes d'ID d'instance par leurs équivalents Firebase ou FCM. Si votre application utilise l'ID d'instance pour récupérer des jetons d'enregistrement FCM ou l'utilise explicitement 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 autre méthode pour demander la suppression de données avec les SDK Firebase suivants :
- 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 tenues de migrer vers les installations Firebase, mais nous le leur recommandons vivement.
Mise à niveau vers les versions minimales du SDK pour les installations Firebase
Pour migrer d'Instance ID vers les installations Firebase, assurez-vous que vos applications utilisent au moins les numéros de version minimum indiqués des SDK Firebase suivants :
| SDK Firebase | Version minimale d'Android | Version minimale d'iOS |
| Firebase Cloud Messaging | v20.3.0 | v6.34.0 |
| Remote Config | v19.2.0 | v6.24.0 |
| SDK Google Analytics for Firebase (SDK de mesure) | v17.4.4 | v6.18.0 |
| Messagerie dans l'application | 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 |
Mettre à jour le code qui appelle explicitement les API Instance ID
Si votre application Android ou Apple utilise directement les méthodes du SDK Instance ID, vous pouvez les remplacer par des alternatives identiques dans le SDK Firebase installations 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. Exemple :
Avant
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) }
Après
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") } }
Supprimer un identifiant
Les méthodes de suppression des ID d'instance sont remplacées par des méthodes de suppression des ID d'installation Firebase. Exemple :
Avant
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();
Après
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") } }
Récupérer un jeton d'enregistrement FCM
Avant l'introduction de Firebase Installations, 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 permettant de 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
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); } }];
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
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); } }];