Intégrer Remote Config à l'atelier de programmation Android

1. Introduction

Dernière mise à jour:09/03/2021

Qu'est-ce que Firebase Remote Config ?

Firebase Remote Config est un service cloud qui vous permet de modifier le comportement et l'apparence de votre application sans que les utilisateurs aient à télécharger une mise à jour sans frais. Lorsque vous utilisez Remote Config, vous créez des valeurs par défaut dans l'application qui contrôlent son comportement et son apparence. Vous pouvez ensuite utiliser la console Firebase ou les API backend Remote Config afin de remplacer les valeurs par défaut dans l'application pour tous les utilisateurs de l'application ou pour certains segments de votre base d'utilisateurs. Votre application contrôle à quel moment les mises à jour sont appliquées, et peut fréquemment rechercher des mises à jour et les appliquer, avec un impact négligeable sur les performances.

Comment ça marche ?

Remote Config inclut une bibliothèque cliente qui gère des tâches importantes, comme la récupération des valeurs de paramètre et leur mise en cache, tout en vous permettant de contrôler à quel moment les nouvelles valeurs sont activées afin qu'elles affectent l'expérience utilisateur de votre application. Vous pouvez ainsi préserver l'expérience de votre application en contrôlant le calendrier des modifications.

Les méthodes get de la bibliothèque cliente Remote Config fournissent un point d'accès unique pour les valeurs de paramètres. Votre application obtient des valeurs côté serveur à l'aide de la même logique qu'elle utilise pour obtenir les valeurs par défaut dans l'application. Vous pouvez ainsi ajouter les fonctionnalités de Remote Config à votre application sans avoir à écrire beaucoup de code.

Pour remplacer les valeurs par défaut dans l'application, utilisez la console Firebase ou les API backend Remote Config pour créer des paramètres ayant le même nom que ceux utilisés dans votre application. Pour chaque paramètre, vous pouvez définir une valeur par défaut côté serveur afin de remplacer la valeur par défaut dans l'application. Vous pouvez également créer des valeurs conditionnelles afin de remplacer la valeur par défaut dans l'application pour les instances d'application qui répondent à certaines conditions. Ce graphique montre comment les valeurs des paramètres sont hiérarchisées dans le backend Remote Config et dans votre application:

61f12f33d2ac3133.png

Points abordés

  • Implémenter Firebase Remote Config
  • Utiliser Firebase Remote Config pour modifier les valeurs sans mettre à jour votre application

Prérequis

  • La dernière version d'Android Studio
  • Un compte Firebase
  • (recommandé, mais facultatif) Un appareil Android physique pour exécuter votre application
  • Connaissances de base de Java ou Kotlin

2. Configuration

(Facultatif) Télécharger l'exemple de code

Dans cet atelier de programmation, vous allez créer votre propre application de test. Toutefois, si vous souhaitez voir et exécuter l'application exemple existante, vous pouvez télécharger l'exemple de code du guide de démarrage rapide.

Cliquez sur le bouton suivant pour télécharger l'ensemble du code de cet atelier de programmation:

Décompressez le fichier ZIP téléchargé. Cette action décompressera un dossier racine nommé quickstart-android-master.

...ou cloner le dépôt GitHub depuis la ligne de commande.

$ git clone https://github.com/firebase/quickstart-android.git

Le dépôt contient plusieurs dossiers. Nous allons utiliser le dossier config android_studio_folder.png.

(Facultatif) Importer l'exemple de code

Lancez Android Studio, puis sélectionnez Import project (Importer le projet) sur l'écran d'accueil. Ouvrez ensuite le dossier téléchargé, puis sélectionnez le dossier config android_studio_folder.png. Cliquez ensuite sur "Ouvrir".

5f90353b0b519642.png

Créer un projet Android

  1. Dans Android Studio, démarrez un nouveau projet
  2. Sélectionner une activité de base
  3. Dans la section "Configure Your Project", écran:
  4. Attribuez un nom à votre projet. Le nom du package et l'option "Enregistrer l'emplacement" seront générés automatiquement.
  5. Langage: Java
  6. SDK 16 ou version ultérieure

3. Ajouter Firebase et Firebase Analytics à votre projet Android

Créer un projet Firebase

Avant d'ajouter Firebase à votre application Android, vous devez créer un projet Firebase afin de l'associer à votre application iOS. Pour en savoir plus sur les projets Firebase, consultez Comprendre les projets Firebase.

  1. Dans la console Firebase, cliquez sur Ajouter un projet, puis sélectionnez ou saisissez un nom de projet. 910158221fe46223.png

Si vous disposez déjà d'un projet Google Cloud Platform (GCP), vous pouvez le sélectionner dans le menu déroulant pour y ajouter des ressources Firebase.

  1. (Facultatif) Si vous créez un projet, vous pouvez modifier son ID de projet.

Firebase attribue automatiquement un identifiant unique à votre projet Firebase. Consultez la page "Comprendre les projets Firebase" pour savoir comment Firebase utilise l'ID de projet.

  1. Cliquez sur Continuer.
  2. Configurez Google Analytics pour votre projet afin de bénéficier d'une expérience optimale avec l'un des produits Firebase suivants:
  • Firebase Crashlytics
  • Firebase Predictions
  • Firebase Cloud Messaging
  • Messagerie dans l'application Firebase
  • Firebase Remote Config
  • Firebase A/B Testing

Lorsque vous y êtes invité, choisissez d'utiliser un compte Google Analytics existant ou d'en créer un. Si vous choisissez de créer un compte, sélectionnez l'emplacement de vos rapports Analytics, puis acceptez les paramètres de partage des données et les conditions d'utilisation de Google Analytics pour votre projet.

1282a798556779ab.png

48ade68c8de27d2.png

  1. Cliquez sur Créer un projet (ou sur Ajouter Firebase si vous utilisez un projet GCP existant).

Firebase provisionne automatiquement des ressources pour votre projet Firebase. Une fois le processus terminé, vous êtes redirigé vers la page de présentation de votre projet Firebase dans la console Firebase.

Enregistrer votre application auprès de Firebase

Une fois que vous avez créé un projet Firebase, vous pouvez y ajouter votre application Android.

Consultez la page Comprendre les projets Firebase pour en savoir plus sur les bonnes pratiques et les éléments à prendre en compte concernant l'ajout d'applications à un projet Firebase, y compris sur la gestion de plusieurs variantes de compilation.

  1. Accédez à la console Firebase.
  2. En haut de la page "Vue d'ensemble du projet", cliquez sur l'icône Android pour lancer le workflow de configuration. Si vous avez déjà ajouté une application à votre projet Firebase, cliquez sur "Ajouter une application" pour afficher les options de la plate-forme.
  3. Saisissez le nom de package de votre application dans le champ Nom du package Android.
  4. (Facultatif) Saisissez le pseudo de l'application.
  5. Laissez le champ SHA-1 vide, car SHA-1 n'est pas requis pour ce projet.
  6. Cliquez sur Enregistrer l'application.

Ajouter le fichier de configuration Firebase

Vous êtes ensuite invité à télécharger un fichier de configuration contenant toutes les métadonnées Firebase nécessaires à votre application. Cliquez sur Download google-services.json (Télécharger google-services.json) pour obtenir votre fichier de configuration Android Firebase (google-services.json).

bc8ec7d3c9a28d75.png

a99b7415462dfc8b.png

Dans votre fichier Gradle au niveau du projet (build.gradle), ajoutez des règles pour inclure le plug-in Gradle des services Google. Vérifiez que vous disposez également du dépôt Maven de Google.

build.gradle au niveau du projet (<project>/build.gradle):

buildscript {

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
  }

  dependencies {
    // ...

    // Add the following line:
    classpath 'com.google.gms:google-services:4.3.5'  // Google Services plugin
  }
}

allprojects {
  // ...

  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
    // ...
  }
}

Dans le fichier Gradle de votre module (au niveau de l'application) (généralement app/build.gradle), appliquez le plug-in Gradle des services Google:

build.gradle au niveau de l'application (<project>/<app-module>/build.gradle):

apply plugin: 'com.android.application'

// Ajoutez la ligne suivante:

apply plugin: 'com.google.gms.google-services' // Plug-in des services Google

android {

// ...

}

Ajouter le SDK Firebase à votre application Android

Pour Remote Config, Google Analytics est requis pour le ciblage conditionnel des instances d'application sur les propriétés utilisateur et les audiences. Assurez-vous d'activer Google Analytics dans votre projet.

(C'est déjà fait dans l'exemple de code du guide de démarrage rapide.)

À l'aide de la BoM Android Firebase, déclarez la dépendance pour la bibliothèque Android Remote Config dans le fichier Gradle de votre module (au niveau de l'application) (généralement app/build.gradle). Si vous suivez la BoM Firebase Android, votre application utilisera toujours des versions compatibles des bibliothèques Firebase Android.

Par ailleurs, dans le cadre de la configuration d'Analytics, vous devez ajouter le SDK Firebase pour Google Analytics à votre application. Sous "Dépendances", ajoutez le code suivant:

app/build.gradle

dependencies {
    // Import the BoM for the Firebase platform
    implementation platform('com.google.firebase:firebase-bom:26.6.0')

    // Declare the dependencies for the Remote Config and Analytics libraries
    // When using the BoM, you don't specify versions in Firebase library dependencies
    implementation 'com.google.firebase:firebase-config'
    implementation 'com.google.firebase:firebase-analytics'
}

Synchroniser votre projet avec des fichiers Gradle

Pour vous assurer que toutes les dépendances sont disponibles pour votre application, synchronisez votre projet avec les fichiers Gradle en sélectionnant File > Synchroniser le projet avec les fichiers Gradle

4. Examiner les principaux composants de Remote Config

Nous allons maintenant passer en revue les étapes à suivre pour utiliser Remote Config dans une application. Ces étapes ont déjà été effectuées dans le code de l'atelier de programmation de démarrage rapide. Veuillez utiliser cette section lorsque vous examinez le code de l'atelier de programmation de démarrage rapide pour comprendre le problème.

1. Obtenir l'objet Singleton Remote Config

Obtenez une instance d'objet Remote Config et définissez l'intervalle d'extraction minimal pour autoriser les actualisations fréquentes:

MainActivity.java

mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);

L'objet singleton permet de stocker les valeurs de paramètre par défaut dans l'application, de récupérer les valeurs de paramètres mises à jour à partir du backend et de contrôler à quel moment les valeurs extraites sont mises à la disposition de votre application.

Pendant le développement, nous vous recommandons de définir un intervalle de récupération minimal relativement faible. Pour en savoir plus, consultez la section Limitation.

2. Définir les valeurs de paramètres par défaut dans l'application

Vous pouvez définir des valeurs de paramètres par défaut dans l'objet Remote Config pour que votre application se comporte comme prévu avant de se connecter au backend Remote Config et pour que les valeurs par défaut soient disponibles si aucune valeur n'est définie dans le backend.

Vous pouvez définir un ensemble de noms de paramètres et de valeurs de paramètres par défaut à l'aide d'un objet Map ou d'un fichier de ressources XML stocké dans le dossier res/xml de votre application. L'exemple d'application de démarrage rapide Remote Config utilise un fichier XML pour définir les noms et les valeurs des paramètres par défaut. Voici comment créer votre propre fichier XML:

  1. Créez un dossier xml sous le dossier res.

4b8a2a637a626e94.png

  1. Effectuez un clic droit sur le dossier xml que vous venez de créer, puis créez un fichier.

358b4ba740120ece.png

  1. Définissez les valeurs par défaut. Dans la section suivante, vous allez essayer de modifier les valeurs par défaut dans le fichier XML de démarrage rapide de Remote Config.
  2. Ajoutez ces valeurs à l'objet Remote Config à l'aide de setDefaultsAsync(int), comme indiqué ci-dessous:

MainActivity.java

mFirebaseRemoteConfig.setDefaultsAsync(R.xml.remote_config_defaults);

3. Obtenir les valeurs de paramètres à utiliser dans votre application

Vous pouvez maintenant obtenir les valeurs des paramètres de l'objet Remote Config. Si vous définissez des valeurs dans le backend, que vous les récupérez, puis que vous les activez, ces valeurs sont disponibles pour votre application. Sinon, vous obtenez les valeurs des paramètres d'application configurées à l'aide de setDefaultsAsync(int). Pour obtenir ces valeurs, appelez la méthode indiquée ci-dessous, qui correspond au type de données attendu par votre application, en fournissant la clé de paramètre en tant qu'argument:

4. Extrayez et activez les valeurs

  1. Pour récupérer les valeurs de paramètre à partir du backend Remote Config, appelez la méthode fetch(). Toutes les valeurs que vous définissez dans le backend sont récupérées et stockées dans l'objet Remote Config.
  2. Pour que les valeurs de paramètres récupérées soient disponibles pour votre application, appelez la méthode activate(). Si vous souhaitez récupérer et activer des valeurs en un seul appel, vous pouvez utiliser une requête retrieveAndActivate() pour récupérer les valeurs du backend Remote Config et les rendre disponibles pour l'application:

MainActivity.java

mFirebaseRemoteConfig.fetchAndActivate()
        .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
            @Override
            public void onComplete(@NonNull Task<Boolean> task) {
                if (task.isSuccessful()) {
                    boolean updated = task.getResult();
                    Log.d(TAG, "Config params updated: " + updated);
                    Toast.makeText(MainActivity.this, "Fetch and activate succeeded",
                            Toast.LENGTH_SHORT).show();

                } else {
                    Toast.makeText(MainActivity.this, "Fetch failed",
                            Toast.LENGTH_SHORT).show();
                }
                displayWelcomeMessage();
            }
        });

Étant donné que ces nouvelles valeurs de paramètres ont une incidence sur le comportement et l'apparence de votre application, vous devez activer les valeurs récupérées à un moment qui assure une expérience fluide à l'utilisateur, par exemple la prochaine fois qu'il ouvre votre application. Pour obtenir plus d'informations et d'exemples, consultez l'article Stratégies de chargement Remote Config.

Limitation

Si une application récupère trop de fois sur une courte période, les appels de récupération sont limités et le SDK renvoie FirebaseRemoteConfigFetchThrottledException. Avant la version 17.0.0 du SDK, la limite était de 5 requêtes d'extraction dans une fenêtre de 60 minutes (les versions plus récentes présentaient des limites plus permissives).

Au cours du développement de l'application, vous souhaiterez peut-être récupérer et activer des configurations très fréquemment (plusieurs fois par heure) afin de pouvoir effectuer rapidement des itérations à mesure que vous développez et testez votre application. Pour vous adapter à l'itération rapide d'un projet avec un maximum de 10 développeurs, vous pouvez définir temporairement un objet FirebaseRemoteConfigSettings avec un intervalle de récupération minimal faible (setMinimumFetchIntervalInSeconds) dans votre application.

L'intervalle de récupération minimal par défaut pour Remote Config est de 12 heures. Cela signifie que les configurations ne seront pas récupérées plus d'une fois à partir du backend dans une fenêtre de 12 heures, quel que soit le nombre d'appels d'extraction réellement effectués. Plus précisément, l'intervalle de récupération minimal est déterminé dans l'ordre suivant:

  1. Le paramètre dans fetch(long)
  2. Le paramètre dans FirebaseRemoteConfigSettings.setMinimumFetchIntervalInSeconds(long)
  3. La valeur par défaut de 12 heures

Pour définir l'intervalle d'extraction minimal sur une valeur personnalisée, utilisez FirebaseRemoteConfigSettings.Builder.setMinimumFetchIntervalInSeconds(long).

5. Modifier le comportement de l'application avec Remote Config

Modifier les paramètres par défaut dans l'application

Ouvrez res/xml/remote_config_defaults.xml et remplacez les valeurs par défaut par autre chose.

res/xml/remote_config_defaults.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- START xml_defaults -->
<defaultsMap>
    <entry>
        <key>loading_phrase</key>
        <value>Fetching config...</value>
    </entry>
    <entry>
        <key>welcome_message_caps</key>
        <value>false</value>
    </entry>
    <entry>
        <key>welcome_message</key>
        <value>Welcome to my awesome app!</value>
    </entry>
</defaultsMap>
    <!-- END xml_defaults -->

Vérifier la modification de la valeur par défaut dans l'application

  1. Exécutez le projet dans un émulateur ou à l'aide d'un appareil de test pour confirmer le comportement.
  2. Cliquez sur "Ouvrir" dans la version Java ou Kotlin.

c1582b989c25ced.png

  1. Lisez le message de bienvenue dans la vue principale.

4c838bf5a629d5b8.png

Définir des valeurs de paramètre dans le backend Remote Config

Testons maintenant l'envoi de valeurs via Remote Config. À l'aide de la console Firebase ou des API backend Remote Config, vous pouvez créer des valeurs par défaut côté serveur qui remplacent les valeurs dans l'application en fonction de la logique conditionnelle ou du ciblage utilisateur souhaités. Cette section décrit les étapes permettant de créer ces valeurs dans la console Firebase.

  1. Ouvrez la console Firebase, puis ouvrez votre projet.
  2. Sélectionnez Remote Config dans le menu de gauche de la section "Engager" pour afficher le tableau de bord Remote Config.
  3. Sous Ajouter un paramètre, saisissez Parameter key.. Sous Default value, ajoutez le texte de votre choix. Cliquez ensuite sur "Ajouter un paramètre". Pour cet atelier de programmation, nous utiliserons les clés de paramètre dans le fichier res/xml/remote_config_defaults.xml. Pour en savoir plus, consultez le tableau ci-dessous:

Clé du paramètre

Valeur par défaut (remote_config_defaults.xml)

Description

loading_phrase

Récupération de la configuration...

String; S'affiche lors de la récupération des valeurs Remote Config.

welcome_message_caps

faux

Booléen ; Si la valeur est "true", le message "welcome_message" est mis en majuscules.

welcome_message

Bienvenue dans mon appli géniale !

String; Message de bienvenue

Capture d'écran d'exemple:

28fa48f18da43002.png

  1. Une fois l'ajout des paramètres terminé, cliquez sur "Publier les modifications".
  2. Exécutez à nouveau votre application sur un émulateur ou un appareil, puis cliquez sur "Fetch Remote Welcome" (Récupérer l'accueil à distance). cette fois-ci.

cfe900477549adb7.png

  1. Le message de bienvenue doit être modifié en fonction de vos valeurs et de vos paramètres Remote Config.

6. Félicitations

Félicitations ! Vous venez de modifier le message de bienvenue à l'aide de Remote Config. Il existe de nombreuses autres façons d'utiliser Remote Config pour modifier et personnaliser des applications. Veuillez consulter les ressources supplémentaires ci-dessous: