Firebase Android Codelab - Créer un chat convivial

1. Vue d'ensemble

capture d'écran

Image : Application de chat conviviale.

Bienvenue dans l'atelier de programmation Friendly Chat. Dans cet atelier de programmation, vous apprendrez à utiliser la plate-forme Firebase pour créer une application de chat sur Android.

Ce que vous apprendrez

  • Comment utiliser l'authentification Firebase pour permettre aux utilisateurs de se connecter.
  • Comment synchroniser les données à l'aide de la base de données en temps réel Firebase.
  • Comment stocker des fichiers binaires dans Cloud Storage pour Firebase.
  • Comment utiliser Firebase Local Emulator Suite pour développer une application Android avec Firebase.

Ce dont vous aurez besoin

  • Android Studio est la version 4.2+.
  • Un Android Emulator avec Android 5.0+.
  • Java 7 ou supérieur. Pour installer Java utiliser ces instructions ; pour vérifier votre version, exécutez java -version .
  • Connaissance du langage de programmation Kotlin.

2. Obtenez l'exemple de code

Cloner le référentiel

Clonez le dépôt GitHub à partir de la ligne de commande :

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

Importer dans Android Studio

Dans Android Studio, sélectionnez Fichier> Ouvrir, puis sélectionnez le build-android-start répertoire ( android_studio_folder ) à partir du répertoire dans lequel vous avez téléchargé l'exemple de code.

Vous devriez maintenant avoir l' build-android-start projet ouvert dans Android Studio. Si vous voyez un avertissement au sujet d' un google-services.json fichier manquant, ne vous inquiétez pas. Il sera ajouté dans une étape ultérieure.

Vérifier les dépendances

Dans cet atelier de programmation, toutes les dépendances dont vous aurez besoin ont déjà été ajoutées pour vous, mais il est important de comprendre comment ajouter le SDK Firebase à votre application :

build.gradle

buildscript {
    // ...

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.2'

        // The google-services plugin is required to parse the google-services.json file
        classpath 'com.google.gms:google-services:4.3.5'
    }
}

app/build.gradle

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'com.google.gms.google-services'
}

android {
    // ...
}

dependencies {
    // ...

    // Google Sign In SDK
    implementation 'com.google.android.gms:play-services-auth:19.0.0'

    // Firebase SDK
    implementation platform('com.google.firebase:firebase-bom:26.6.0')
    implementation 'com.google.firebase:firebase-database-ktx'
    implementation 'com.google.firebase:firebase-storage-ktx'
    implementation 'com.google.firebase:firebase-auth-ktx'

    // Firebase UI Library
    implementation 'com.firebaseui:firebase-ui-auth:7.2.0'
    implementation 'com.firebaseui:firebase-ui-database:7.2.0'
}

3. Installez l'interface de ligne de commande Firebase

Pour exécuter l' émulateur Firebase Suite , vous devez installer et utiliser le Firebase CLI .

Installer l'interface de ligne de commande

Option 1 - Installer avec npm

Si Node.js et npm sont déjà installés sur votre machine, vous pouvez installer la CLI avec la commande suivante :

npm install -g firebase-tools@latest

Option 2 - Installer le binaire autonome

Si vous ne disposez pas Node.js / NPM ou vous êtes nouveau au développement d'applications, vous pouvez installer la CLI en tant que binaire autonome en suivant les instructions de votre plate - forme ici .

Vérifier l'installation

Une fois que vous avez installé CLI Firebase le, exécutez la commande suivante pour vous assurer que vous avez la version 9.11.0 ou plus:

firebase --version

4. Connectez-vous à la suite d'émulateurs Firebase

Démarrer les émulateurs

Dans votre terminal, exécutez la commande suivante à partir de la racine de votre région codelab-friendlychat-android répertoire:

firebase emulators:start --project=demo-friendlychat-android

Vous devriez voir des journaux comme celui-ci. Les valeurs du port ont été définies dans le firebase.json dossier, qui a été inclus dans le code échantillon cloné.

$ firebase emulators:start --project=demo-friendlychat-android
i  emulators: Starting emulators: auth, database, storage
i  emulators: Detected demo project ID "demo-friendlychat-android", emulated services will use a demo configuration and attempts to access non-emulated services for this project will fail.
i  database: Database Emulator logging to database-debug.log
i  ui: Emulator UI logging to ui-debug.log

┌─────────────────────────────────────────────────────────────┐
│ ✔  All emulators ready! It is now safe to connect your app. │
│ i  View Emulator UI at http://localhost:4000                │
└─────────────────────────────────────────────────────────────┘

┌────────────────┬────────────────┬────────────────────────────────┐
│ Emulator       │ Host:Port      │ View in Emulator UI            │
├────────────────┼────────────────┼────────────────────────────────┤
│ Authentication │ localhost:9099 │ http://localhost:4000/auth     │
├────────────────┼────────────────┼────────────────────────────────┤
│ Database       │ localhost:9000 │ http://localhost:4000/database │
├────────────────┼────────────────┼────────────────────────────────┤
│ Storage        │ localhost:9199 │ http://localhost:4000/storage  │
└────────────────┴────────────────┴────────────────────────────────┘
  Emulator Hub running at localhost:4400
  Other reserved ports: 4500

Issues? Report them at https://github.com/firebase/firebase-tools/issues and attach the *-debug.log files.

Accédez à http: // localhost: 4000 dans votre navigateur Web pour afficher l'émulateur Firebase Suite UI:

Accueil de l'interface utilisateur de la suite d'émulateurs

Laissez les emulators:start la commande de marche pour le reste de la codelab.

Connectez votre application

Dans Android Studio, ouvrez MainActivity.kt , puis ajoutez le code suivant dans la onCreate méthode:

// When running in debug mode, connect to the Firebase Emulator Suite.
// "10.0.2.2" is a special IP address which allows the Android Emulator
// to connect to "localhost" on the host computer. The port values (9xxx)
// must match the values defined in the firebase.json file.
if (BuildConfig.DEBUG) {
    Firebase.database.useEmulator("10.0.2.2", 9000)
    Firebase.auth.useEmulator("10.0.2.2", 9099)
    Firebase.storage.useEmulator("10.0.2.2", 9199)
}

5. Exécutez l'application de démarrage

Ajouter google-services.json

Pour que votre application Android pour vous connecter à Firebase, vous devez ajouter un google-services.json fichier dans l' app dossier de votre projet Android. Pour les besoins de cet atelier de programmation, nous avons fourni un fichier JSON fictif qui vous permettra de vous connecter à Firebase Emulator Suite.

Copiez le mock-google-services.json fichier dans le build-android-start/app dossier comme google-services.json :

cp mock-google-services.json build-android-start/app/google-services.json

Dans la dernière étape de cet atelier de programmation, vous apprendrez à créer un véritable projet Firebase et une application Android Firebase afin de pouvoir remplacer ce fichier JSON fictif par votre propre configuration.

Exécutez l'application

Maintenant que vous avez importé le projet dans Android Studio et ajouté un fichier JSON de configuration Firebase, vous êtes prêt à exécuter l'application pour la première fois.

  1. Démarrez votre émulateur Android.
  2. Dans Android Studio, cliquez sur Exécuter (exécuter ) dans la barre d'outils.

L'application devrait se lancer sur votre émulateur Android. À ce stade, vous devriez voir une liste de messages vide, et l'envoi et la réception de messages ne fonctionneront pas. Dans la prochaine étape de cet atelier de programmation, vous authentifierez les utilisateurs afin qu'ils puissent utiliser Friendly Chat.

6. Activer l'authentification

Cette application utilisera Firebase Realtime Database pour stocker tous les messages de discussion. Avant d'ajouter des données, cependant, nous devons nous assurer que l'application est sécurisée et que seuls les utilisateurs authentifiés peuvent publier des messages. Dans cette étape, nous allons activer l'authentification Firebase et configurer les règles de sécurité de la base de données en temps réel.

Ajouter une fonctionnalité de connexion de base

Ensuite, nous ajouterons un code d'authentification Firebase de base à l'application pour détecter les utilisateurs et implémenter un écran de connexion.

Rechercher l'utilisateur actuel

Tout d' abord ajouter la variable d'instance suivante à la MainActivity.kt classe:

MainActivity.kt

// Firebase instance variables
private lateinit var auth: FirebaseAuth

Maintenant , nous allons modifier MainActivity d'envoyer l'utilisateur à l'écran de connexion à chaque fois qu'ils ouvrent l'application et sont non authentifié. Ajouter ce qui suit à la onCreate() méthode après la binding est fixée à la vue:

MainActivity.kt

// Initialize Firebase Auth and check if the user is signed in
auth = Firebase.auth
if (auth.currentUser == null) {
    // Not signed in, launch the Sign In activity
    startActivity(Intent(this, SignInActivity::class.java))
    finish()
    return
}

Nous voulons également vérifier si l'utilisateur est connecté pendant onStart() :

MainActivity.kt

public override fun onStart() {
    super.onStart()
    // Check if user is signed in.
    if (auth.currentUser == null) {
        // Not signed in, launch the Sign In activity
        startActivity(Intent(this, SignInActivity::class.java))
        finish()
        return
    }
}

Ensuite , mettre en œuvre le getUserPhotoUrl() et getUserName() méthodes pour renvoyer les informations appropriées sur l'utilisateur Firebase authentifié:

MainActivity.kt

private fun getPhotoUrl(): String? {
    val user = auth.currentUser
    return user?.photoUrl?.toString()
}

private fun getUserName(): String? {
    val user = auth.currentUser
    return if (user != null) {
        user.displayName
    } else ANONYMOUS
}

Mettre en œuvre ensuite la signOut() méthode pour gérer le signe sur le bouton:

MainActivity.kt

private fun signOut() {
    AuthUI.getInstance().signOut()
    startActivity(Intent(this, SignInActivity::class.java))
    finish()
}

Nous avons maintenant toute la logique en place pour envoyer l'utilisateur à l'écran de connexion si nécessaire. Ensuite, nous devons implémenter l'écran de connexion pour authentifier correctement les utilisateurs.

Implémenter l'écran de connexion

Ouvrez le fichier SignInActivity.kt . Ici, un simple bouton de connexion est utilisé pour lancer l'authentification. Dans cette section, vous utiliserez FirebaseUI pour implémenter la logique de connexion.

Ajouter une variable d'instance Auth dans la SignInActivity classe sous la // Firebase instance variables commentaire:

SignInActivity.kt

// Firebase instance variables
private lateinit var auth: FirebaseAuth

Ensuite, modifier la onCreate() méthode pour initialiser Firebase de la même manière que vous avez fait à l' MainActivity :

SignInActivity.kt

// Initialize FirebaseAuth
auth = Firebase.auth

Ajouter un ActivityResultLauncher champ à SignInActivity :

SignInActivity.kt

// ADD THIS
private val signIn: ActivityResultLauncher<Intent> =
        registerForActivityResult(FirebaseAuthUIActivityResultContract(), this::onSignInResult)

override fun onCreate(savedInstanceState: Bundle?) {
    // ...
}

Ensuite, modifier la onStart() méthode pour lancer le signe FirebaseUI en flux:

SignInActivity.kt

public override fun onStart() {
    super.onStart()

    // If there is no signed in user, launch FirebaseUI
    // Otherwise head to MainActivity
    if (Firebase.auth.currentUser == null) {
        // Sign in with FirebaseUI, see docs for more details:
        // https://firebase.google.com/docs/auth/android/firebaseui
        val signInIntent = AuthUI.getInstance()
                .createSignInIntentBuilder()
                .setLogo(R.mipmap.ic_launcher)
                .setAvailableProviders(listOf(
                        AuthUI.IdpConfig.EmailBuilder().build(),
                        AuthUI.IdpConfig.GoogleBuilder().build(),
                ))
                .build()

        signIn.launch(signInIntent)
    } else {
        goToMainActivity()
    }
}

Ensuite, mettre en œuvre la onSignInResult méthode pour gérer le signe du résultat. Si le résultat de l'signin a réussi, continuer à MainActivity :

SignInActivity.kt

private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) {
    if (result.resultCode == RESULT_OK) {
        Log.d(TAG, "Sign in successful!")
        goToMainActivity()
    } else {
        Toast.makeText(
                this,
                "There was an error signing in",
                Toast.LENGTH_LONG).show()

        val response = result.idpResponse
        if (response == null) {
            Log.w(TAG, "Sign in canceled")
        } else {
            Log.w(TAG, "Sign in error", response.error)
        }
    }
}

C'est ça! Vous avez implémenté l'authentification avec FirebaseUI en quelques appels de méthode et sans avoir à gérer de configuration côté serveur.

Testez votre travail

Exécutez l'application sur votre émulateur Android. Vous devriez être immédiatement redirigé vers l'écran de connexion. Appuyez sur le bouton Connectez - vous avec e - mail, puis créez un compte. Si tout est implémenté correctement, vous devriez être redirigé vers l'écran de messagerie.

Une fois connecté, ouvrez l'interface utilisateur Suite Emulator Firebase dans votre navigateur, puis cliquez sur l'onglet Authentification pour voir ce premier signé en compte utilisateur.

7. Lire les messages

Dans cette étape, nous allons ajouter des fonctionnalités pour lire et afficher les messages stockés dans la base de données en temps réel.

Importer des exemples de messages

  1. Dans l'émulateur Firebase Suite interface utilisateur, sélectionnez l'onglet Base de données en temps réel.
  2. Glissez-déposez le initial_messages.json fichier de votre copie locale du dépôt de codelab dans la visionneuse de données.

Vous devriez maintenant avoir quelques messages sous le messages noeud de la base de données.

Lire les données

Synchroniser les messages

Dans cette section, nous ajoutons du code qui synchronise les messages nouvellement ajoutés à l'interface utilisateur de l'application en :

  • Initialisation de la base de données en temps réel Firebase et ajout d'un écouteur pour gérer les modifications apportées aux données.
  • Mise à jour du RecyclerView adaptateur afin que les nouveaux messages seront affichés.
  • L' ajout des variables d'instance de base de données avec vos autres variables d'instance Firebase dans la MainActivity classe:

MainActivity.kt

// Firebase instance variables
// ...
private lateinit var db: FirebaseDatabase
private lateinit var adapter: FriendlyMessageAdapter

Modifier votre MainActivity de onCreate() méthode sous le commentaire // Initialize Realtime Database and FirebaseRecyclerAdapter en // Initialize Realtime Database and FirebaseRecyclerAdapter la // Initialize Realtime Database and FirebaseRecyclerAdapter de // Initialize Realtime Database and FirebaseRecyclerAdapter avec le code défini ci - dessous. Ce code ajoute tous les messages existants en temps réel de la base de données et à l' écoute des nouvelles entrées enfant de messages chemin dans votre base de données en temps réel Firebase. Il ajoute un nouvel élément à l'interface utilisateur pour chaque message :

MainActivity.kt

// Initialize Realtime Database
db = Firebase.database
val messagesRef = db.reference.child(MESSAGES_CHILD)

// The FirebaseRecyclerAdapter class and options come from the FirebaseUI library
// See: https://github.com/firebase/FirebaseUI-Android
val options = FirebaseRecyclerOptions.Builder<FriendlyMessage>()
    .setQuery(messagesRef, FriendlyMessage::class.java)
    .build()
adapter = FriendlyMessageAdapter(options, getUserName())
binding.progressBar.visibility = ProgressBar.INVISIBLE
manager = LinearLayoutManager(this)
manager.stackFromEnd = true
binding.messageRecyclerView.layoutManager = manager
binding.messageRecyclerView.adapter = adapter

// Scroll down when a new message arrives
// See MyScrollToBottomObserver for details
adapter.registerAdapterDataObserver(
    MyScrollToBottomObserver(binding.messageRecyclerView, adapter, manager)
)

Suivant dans la FriendlyMessageAdapter.kt classe mettre en œuvre la bind() méthode dans la classe interne MessageViewHolder() :

FriendlyMessageAdapter.kt

inner class MessageViewHolder(private val binding: MessageBinding) : ViewHolder(binding.root) {
    fun bind(item: FriendlyMessage) {
        binding.messageTextView.text = item.text
        setTextColor(item.name, binding.messageTextView)

        binding.messengerTextView.text = if (item.name == null) ANONYMOUS else item.name
        if (item.photoUrl != null) {
            loadImageIntoView(binding.messengerImageView, item.photoUrl!!)
        } else {
            binding.messengerImageView.setImageResource(R.drawable.ic_account_circle_black_36dp)
        }
    }
    ...
}

Nous devons également afficher des messages qui sont des images, afin de mettre en œuvre aussi bind() méthode dans la classe interne ImageMessageViewHolder() :

FriendlyMessageAdapter.kt

inner class ImageMessageViewHolder(private val binding: ImageMessageBinding) :
    ViewHolder(binding.root) {
    fun bind(item: FriendlyMessage) {
        loadImageIntoView(binding.messageImageView, item.imageUrl!!)

        binding.messengerTextView.text = if (item.name == null) ANONYMOUS else item.name
        if (item.photoUrl != null) {
            loadImageIntoView(binding.messengerImageView, item.photoUrl!!)
        } else {
            binding.messengerImageView.setImageResource(R.drawable.ic_account_circle_black_36dp)
        }
    }
}

Enfin, de retour à MainActivity , démarrer et arrêter l' écoute des mises à jour en temps réel de Firebase Base de données. Mise à jour du onPause() et onResume() méthodes MainActivity comme indiqué ci - dessous:

MainActivity.kt

public override fun onPause() {
    adapter.stopListening()
    super.onPause()
}

public override fun onResume() {
    super.onResume()
    adapter.startListening()
}

Tester la synchronisation des messages

  1. Cliquez sur Exécuter (exécuter ).
  2. Dans l'interface utilisateur Suite Emulator, retournez à l'onglet Base de données en temps réel, puis ajouter manuellement un nouveau message. Vérifiez que le message s'affiche dans votre application Android :

Félicitations, vous venez d'ajouter une base de données en temps réel à votre application !

8. Envoyer des messages

Mettre en œuvre l'envoi de SMS

Dans cette section, vous ajouterez la possibilité pour les utilisateurs de l'application d'envoyer des messages texte. L'extrait de code ci - dessous pour les événements écoutes cliquez sur le bouton d'envoi, crée un nouveau FriendlyMessage objet avec le contenu du champ de message, et pousse le message à la base de données. Le push() méthode ajoute un identifiant généré automatiquement à la trajectoire de l'objet poussé. Ces identifiants sont séquentiels, ce qui garantit que les nouveaux messages seront ajoutés à la fin de la liste.

Mettre à jour le clic d' écoute du bouton d'envoi dans la onCreate() méthode dans la MainActivity classe. Ce code est en bas de la onCreate() méthode déjà. Mise à jour du onClick() corps pour correspondre au code ci - dessous:

MainActivity.kt

// Disable the send button when there's no text in the input field
// See MyButtonObserver for details
binding.messageEditText.addTextChangedListener(MyButtonObserver(binding.sendButton))

// When the send button is clicked, send a text message
binding.sendButton.setOnClickListener {
    val friendlyMessage = FriendlyMessage(
        binding.messageEditText.text.toString(),
        getUserName(),
        getPhotoUrl(),
        null /* no image */
    )
    db.reference.child(MESSAGES_CHILD).push().setValue(friendlyMessage)
    binding.messageEditText.setText("")
}

Implémenter l'envoi de messages image

Dans cette section, vous allez ajouter la possibilité pour les utilisateurs de l'application d'envoyer des messages image. La création d'un message image se fait avec ces étapes :

  • Sélectionnez l'image
  • Gérer la sélection d'images
  • Écrire un message image temporaire dans la base de données en temps réel
  • Commencer à télécharger l'image sélectionnée
  • Mettre à jour l'URL du message d'image à celle de l'image téléchargée, une fois le téléchargement terminé

Sélectionnez une image

Pour ajouter des images, cet atelier de programmation utilise Cloud Storage pour Firebase. Cloud Storage est un bon endroit pour stocker les données binaires de votre application.

Gérer la sélection d'images et écrire un message temporaire

Une fois que l'utilisateur a sélectionné une image, la sélection d'image Intent est lancée. Ceci est déjà mis en œuvre dans le code à la fin de la onCreate() méthode. Une fois terminé , il appelle le MainActivity de onImageSelected() méthode. À l'aide de l'extrait de code ci-dessous, vous rédigerez un message avec une URL d'image temporaire dans la base de données indiquant que l'image est en cours de téléchargement.

MainActivity.kt

private fun onImageSelected(uri: Uri) {
    Log.d(TAG, "Uri: $uri")
    val user = auth.currentUser
    val tempMessage = FriendlyMessage(null, getUserName(), getPhotoUrl(), LOADING_IMAGE_URL)
    db.reference
            .child(MESSAGES_CHILD)
            .push()
            .setValue(
                    tempMessage,
                    DatabaseReference.CompletionListener { databaseError, databaseReference ->
                        if (databaseError != null) {
                            Log.w(
                                    TAG, "Unable to write message to database.",
                                    databaseError.toException()
                            )
                            return@CompletionListener
                        }

                        // Build a StorageReference and then upload the file
                        val key = databaseReference.key
                        val storageReference = Firebase.storage
                                .getReference(user!!.uid)
                                .child(key!!)
                                .child(uri.lastPathSegment!!)
                        putImageInStorage(storageReference, uri, key)
                    })
}

Télécharger l'image et mettre à jour le message

Ajoutez la méthode putImageInStorage() à MainActivity . Il est appelé à onImageSelected() pour lancer le téléchargement de l'image sélectionnée. Une fois le téléchargement terminé, vous mettrez à jour le message pour utiliser l'image appropriée.

MainActivity.kt

private fun putImageInStorage(storageReference: StorageReference, uri: Uri, key: String?) {
    // First upload the image to Cloud Storage
    storageReference.putFile(uri)
        .addOnSuccessListener(
            this
        ) { taskSnapshot -> // After the image loads, get a public downloadUrl for the image
            // and add it to the message.
            taskSnapshot.metadata!!.reference!!.downloadUrl
                .addOnSuccessListener { uri ->
                    val friendlyMessage =
                        FriendlyMessage(null, getUserName(), getPhotoUrl(), uri.toString())
                    db.reference
                        .child(MESSAGES_CHILD)
                        .child(key!!)
                        .setValue(friendlyMessage)
                }
        }
        .addOnFailureListener(this) { e ->
            Log.w(
                TAG,
                "Image upload task was unsuccessful.",
                e
            )
        }
}

Tester l'envoi de messages

  1. Dans Android Studio, cliquez sur leexécuter Bouton Exécuter.
  2. Dans votre émulateur Android, saisissez un message, puis appuyez sur le bouton d'envoi. Le nouveau message doit être visible dans l'interface utilisateur de l'application et dans l'interface utilisateur de Firebase Emulator Suite.
  3. Dans l'émulateur Android, appuyez sur l'image "+" pour sélectionner une image sur votre appareil. Le nouveau message doit être visible d'abord avec une image d'espace réservé, puis avec l'image sélectionnée une fois le téléchargement de l'image terminé. Le nouveau message doit également être visible dans l'interface utilisateur d'Emulator Suite, en particulier en tant qu'objet dans l'onglet Base de données en temps réel et en tant que blob dans l'onglet Stockage.

9. Félicitations !

Vous venez de créer une application de chat en temps réel avec Firebase !

Ce que tu as appris

  • Authentification Firebase
  • Base de données en temps réel Firebase
  • Stockage cloud pour Firebase

Ensuite, essayez d'utiliser ce que vous avez appris dans cet atelier de programmation pour ajouter Firebase à votre propre application Android ! Pour en savoir plus sur Firebase, visitez firebase.google.com .

Si vous voulez apprendre comment mettre en place un vrai projet Firebase et l' utilisation des ressources réelles Firebase ( au lieu d'un projet de démonstration et que les ressources émulé), passez à l'étape suivante.

Remarque: Même après avoir mis en place un vrai projet Firebase et surtout quand vous avez commencé la construction d' une application réelle, nous vous recommandons d' utiliser l'émulateur local Firebase Suite pour le développement et les tests.

10. Facultatif : créez et configurez un projet Firebase

Dans cette étape, vous allez créer un véritable projet Firebase et une application Android Firebase à utiliser avec cet atelier de programmation. Vous ajouterez également votre configuration Firebase spécifique à votre application. Et enfin, vous configurerez de véritables ressources Firebase à utiliser avec votre application.

Créer un projet Firebase

  1. Dans votre navigateur, accédez à la console Firebase .
  2. Sélectionnez Ajouter un projet.
  3. Sélectionnez ou saisissez un nom de projet. Vous pouvez utiliser n'importe quel nom que vous voulez.
  4. Vous n'avez pas besoin de Google Analytics pour cet atelier de programmation, vous pouvez donc ignorer son activation pour votre projet.
  5. Cliquez sur Créer un projet. Lorsque votre projet est prêt, cliquez sur Continuer.

Ajouter Firebase à votre projet Android

Avant de commencer cette étape, obtenez le hachage SHA1 de votre application. Exécutez la commande suivante à partir de votre locale build-android-start répertoire pour déterminer la SHA1 de votre clé de débogage:

./gradlew signingReport

Store: /Users/<username>/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A5:88:41:04:8F:06:59:6A:AE:33:76:87:AA:AD:19:23
SHA1: A7:89:F5:06:A8:07:A1:22:EC:90:6A:A6:EA:C3:D4:8B:3A:30:AB:18
SHA-256: 05:A2:2A:35:EE:F2:51:23:72:4D:72:67:A5:6A:8A:58:22:2C:00:A6:AB:F6:45:D5:A1:82:D8:90:A4:69:C8:FE
Valid until: Wednesday, August 10, 2044

Vous devriez voir une sortie comme ci-dessus. La ligne importante est le SHA1 hachage. Si vous ne parvenez pas à trouver votre hash SHA1, voir cette page pour plus d' informations.

Revenez à la console Firebase et suivez ces étapes pour enregistrer votre projet Android avec votre projet Firebase :

  1. Depuis l'écran de présentation de votre nouveau projet, cliquez sur l'icône Android pour lancer le workflow de configuration :ajouter une application Android
  2. Sur l'écran suivant, entrez com.google.firebase.codelab.friendlychat comme le nom du package pour votre application.
  3. Cliquez sur Enregistrer App, puis cliquez sur Télécharger google-services.json pour télécharger le fichier de configuration Firebase.
  4. Copiez le google-services.json fichier dans l' app répertoire de votre projet Android.
  5. Passer les prochaines étapes indiquées dans le flux de travail de configuration de la console (pour vous , ils ont déjà été faites dans le build-android-start la build-android-start projet).
  6. Assurez-vous que toutes les dépendances sont disponibles pour votre application en synchronisant votre projet avec les fichiers Gradle. Dans la barre d' Android Studio, sélectionnez Fichier> Project Sync avec Gradle fichiers.

Configurer l'authentification Firebase

Avant que votre application puisse accéder aux API Firebase Authentication au nom de vos utilisateurs, vous devez activer Firebase Authentication et les fournisseurs de connexion que vous souhaitez utiliser dans votre application.

  1. Dans la console Firebase , sélectionnez l' authentification à partir du panneau de navigation côté gauche.
  2. Sélectionnez l'authentification dans l' onglet méthode.
  3. Cliquez sur Email / Mot de passe, puis bascule l'interrupteur activé (bleu).
  4. Cliquez sur Google, puis bascule l'interrupteur activé (bleu) et définir un e - mail de soutien du projet.

Si vous obtenez des erreurs plus tard dans cet atelier de programmation avec le message "CONFIGURATION_NOT_FOUND", revenez à cette étape et vérifiez votre travail.

Configurer la base de données en temps réel

L'application de cet atelier de programmation stocke les messages de discussion dans Firebase Realtime Database. Dans cette section, nous allons créer une base de données et configurer sa sécurité via un langage de configuration JSON appelé Firebase Security Rules.

  1. Dans la console Firebase , sélectionnez Base de données en temps réel à partir du panneau de navigation côté gauche.
  2. Cliquez sur Créer la base de données pour créer une nouvelle instance de base de données en temps réel. Lorsque vous êtes invité, sélectionnez le us-central1 région, puis cliquez sur Suivant.
  3. Lorsque vous êtes invité sur les règles de sécurité, choisissez le mode verrouillé, puis cliquez sur Activer.
  4. Une fois que l'instance de base de données a été créée, sélectionnez l'onglet Règles, puis mettre à jour la configuration des règles avec les éléments suivants:
     {
       "rules": {
         "messages": {
           ".read": "auth.uid != null",
           ".write": "auth.uid != null"
         }
       }
     }
    

Pour plus d' informations sur la façon dont le travail Règles de sécurité (y compris la documentation sur la variable « auth »), consultez la documentation de sécurité de base de données en temps réel .

Configurer Cloud Storage pour Firebase

  1. Dans la console Firebase , sélectionnez Stockage à partir du panneau de navigation côté gauche.
  2. Cliquez sur Démarrer pour activer Cloud Storage pour votre projet.
  3. Suivez les étapes de la boîte de dialogue pour configurer votre compartiment, en utilisant les valeurs par défaut suggérées.

Se connecter aux ressources Firebase

Dans une étape antérieure de ce codelab, vous avez ajouté ce qui suit à MainActivity.kt . Ce bloc conditionnel a connecté votre projet Android à Firebase Emulator Suite.

// REMOVE OR DISABLE THIS
if (BuildConfig.DEBUG) {
    Firebase.database.useEmulator("10.0.2.2", 9000)
    Firebase.auth.useEmulator("10.0.2.2", 9099)
    Firebase.storage.useEmulator("10.0.2.2", 9199)
}

Si vous souhaitez connecter votre application à votre nouveau projet réel Firebase et ses ressources réelles Firebase, vous pouvez supprimer ce bloc ou d' exécuter votre application en mode release afin que BuildConfig.DEBUG est false .