Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Gérer les installations Firebase

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 tels que la messagerie intégrée ou la configuration à distance sans que les développeurs n'interagissent 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'autorisation d'installation pour authentifier les installations Firebase.

Pour commencer à appeler directement l'API FIS, ajoutez le SDK à votre application.

Ajouter le SDK d'installations Firebase à votre application

iOS

  1. Ajouter la dépendance pour les installations Firebase à votre PODFILE:
    pod 'Firebase/Installations'
  2. Exécuter pod install et ouvrir le créé .xcworkspace fichier.
  3. Importer le module Firebase dans votre UIApplicationDelegate :

    Rapide

    import Firebase

    Objectif c

    @import Firebase;
  4. Configurer une FirebaseApp instance partagée, généralement dans votre application application:didFinishLaunchingWithOptions: méthode:

    Rapide

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objectif c

    // Use Firebase library to configure APIs
    [FIRApp configure];

Android

Ajouter la dépendance pour les installations Firebase Android SDK à votre module (app-niveau) de fichier Gradle (généralement app/build.gradle ):

implementation 'com.google.firebase:firebase-installations:17.0.0'

JavaScript

Selon la façon dont votre application web est hébergé, votre configuration peut être gérée automatiquement ou vous devez 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/9.1.3/firebase-installations.js"></script>

Supprimer une installation Firebase

Les données liées à une installation Firebase est généralement pas d' identification personnelle. 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 en direct 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 à un niveau élevé dans Google déclaration sur la suppression et la conservation .

À moins que vous ne désactiviez tous les services générateurs de FID dans votre application, FIS crée un nouvel ID en quelques jours. Firebase considère l'ID nouvellement créé comme une nouvelle installation de 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 FID générés par les services Firebase, appelez la méthode appropriée à partir du SDK d'installations 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();

Supprimer un FID avec un appel API serveur

Pour supprimer un appel avec un FID API serveur, ajoutez le Firebase Administrateur SDK à votre serveur , si vous avez pas déjà.

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 nommage de l'ID d'instance. Cependant, elles suppriment toutes le FID lorsqu'elles sont appelées avec n'importe quel Firebase actuel. 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();

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 serveur, les services Firebase démarrent le processus pour supprimer les données liées à cet ID d'installation, arrêtent d'accepter de nouvelles données pour cet ID pendant 1 à 2 jours, puis notifient l'application cliente que l'ID a été supprimé. Jusqu'à ce que Firebase notifie l'application cliente, certains des 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 non lié, 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 Firebase. Par exemple, pour effectuer des tests pendant le développement de la messagerie Firebase In-App, vous pouvez identifier et cibler le bon appareil de test à l'aide de son ID d'installation Firebase.

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);

Récupérer les jetons d'autorisation d'installation

Les services Firebase peuvent authentifier les installations Firebase avec des jetons d'authentification récupérés à partir de FIS. Par exemple, lors de la conception de tests A/B pour Remote Config, vous pouvez authentifier un périphérique de test ciblé à l'aide d'un jeton d'authentification d'installation.

Un jeton d'autorisation 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 d'application Firebase associé ( appId d' appId )
  • La date d'expiration du jeton

Un jeton d'autorisation d'installation ne peut pas être révoqué et reste valide jusqu'à sa date d'expiration. La durée de vie du jeton par défaut est d'une semaine.

Pour récupérer un jeton d'autorisation 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

FirebaseInstallations.getInstance().getToken(/* forceRefresh */ true)
    .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);

Surveiller le cycle de vie de l'ID d'installation de Firebase

Pendant le fonctionnement normal d'une application, les identifiants d'installation Firebase (FID) ne nécessitent pas de surveillance particulière. Cependant, les applications qui récupèrent et utilisent explicitement des FID doivent ajouter une logique pour surveiller la suppression ou la rotation potentielle du FID. Voici quelques cas où les FID pourraient être supprimés ou pivotés :

  • Désinstallation ou réinstallation de l'application, par exemple lorsqu'un utilisateur final 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 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'autorisation d'installation associé à un FID supprimé est supprimé, quelle que soit sa propre maturité, et est remplacé par un nouveau jeton d'autorisation 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 affiché par défaut NSNotificationCenter chaque fois qu'une nouvelle est attribué FID.

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

Des applications Web peuvent s'abonner au onIdChange crochet.

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.
});

Migrer de l'ID d'instance vers les installations Firebase

Avant l'introduction des installations Firebase, Firebase s'appuyait sur le SDK d'ID d'instance pour les identifiants des installations d'applications. Les installations Firebase offrent des avantages significatifs par rapport à l'ID d'instance en termes de fiabilité, de performances et de sécurité. Les applications Firebase qui dépendent du SDK d'ID d'instance doivent migrer vers les installations Firebase.

Le processus de migration est différent en fonction de votre application :

  • Apps qui ne remettent pas directement ID instance API peuvent migrer par la mise à jour leurs versions du SDK . La plupart des applications Firebase appartiennent à cette catégorie.

  • Apps qui font explicitement les appels API à ID d' instance doit mettre à jour les versions du SDK et modifier le code pour remplacer les méthodes ID d' instance avec leurs installations ou Firebase é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 les instances d'application ou à toute autre fin, vous devrez mettre à jour votre code d'application.

Actuellement, FIS est rétrocompatible avec l'ancien identifiant Firebase Instance ID. La suppression d' un IID est une méthode alternative de demande de suppression de données avec ces Firebase SDK:

  • 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 nécessaires pour migrer vers des installations; Firebase cependant, il est fortement recommandé de le faire.

Mise à niveau vers les versions minimales du SDK pour les installations Firebase

Pour migrer des installations d'ID d'instance 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 minimale d'iOS
Messagerie Cloud Firebase v20.3.0 v6.34.0
Configuration à distance v19.2.0 v6.24.0
Google Analytics \ (SDK de mesure) v17.4.4 v6.18.0
Messagerie intégrée v19.0.7 v6.24.0
Suivi de la performance v19.0.8 v6.21.0
Crashlytiques v17.2.1 v6.23.0
Kit 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 iOS utilise directement les méthodes du SDK d'ID d'instance, vous pouvez remplacer cette utilisation par des alternatives identiques dans le SDK d'installations 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 de suppression des ID d'instance sont remplacées par des méthodes de suppression des 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érer 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;
  }
}];