Guide de démarrage rapide pour utiliser une bibliothèque cliente mobile/Web

Dans ce guide de démarrage rapide, vous allez découvrir comment configurer Firestore, ajouter des données et lire des données à l'aide de la bibliothèque cliente Android, Plates-formes Apple, Web, Unity ou C++.

Créer une base de données Firestore

  1. Si vous ne l’avez pas encore fait, créez un projet Firebase dans la console Firebase en cliquant sur Ajouter un projet, puis en suivant les instructions pour créer un nouveau projet Firebase ou pour ajouter les services Firebase à un projet GCP existant.

  2. Dans le volet de navigation de la console Firebase, sélectionnez Firestore, puis cliquez sur Créer une base de données pour Firestore.

  3. Pour les règles de sécurité Firestore, sélectionnez Mode test :

    Mode test
    Convient pour se familiariser avec les bibliothèques clientes mobiles et Web, mais permet à tout le monde de lire et d'écraser les données. Lorsque vous aurez terminé les tests, passez en revue la section Sécuriser les données.
  4. Sélectionnez un emplacement pour la base de données.

    • Ce paramètre d'emplacement correspond à l'emplacement par défaut des ressources Google Cloud Platform (GCP) pour le projet. Cet emplacement sera utilisé pour les services GCP exploités dans le projet qui requièrent un paramètre d'emplacement, plus précisément le bucket Cloud Storage par défaut et l'application App Engine (qui est nécessaire si vous utilisez Cloud Scheduler).

    • Si vous ne parvenez pas à sélectionner un emplacement, c'est que votre projet dispose déjà d'un emplacement par défaut des ressources GCP. Il a été défini lors de la création du projet ou lors de la configuration d'un autre service nécessitant un paramètre d'emplacement.

  5. Cliquez sur OK.

Lorsque vous activez Firestore, cela active également l'API dans Cloud API Manager.

Configurer l'environnement de développement

Ajoutez les dépendances et les bibliothèques clientes requises à votre application.

Version Web 9

  1. Suivez les instructions pour ajouter Firebase à votre application Web.
  2. Importez à la fois Firebase et Firestore :
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
    

Version Web 8

  1. Suivez les instructions pour ajouter Firebase à votre application Web.
  2. Ajoutez les bibliothèques Firebase et Firestore à votre application :
    <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-firestore.js"></script>
    Le SDK Firestore est également disponible en tant que package npm.
    npm install firebase@8.10.0 --save
    
    Vous devez charger manuellement Firebase et Firestore.
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/firestore");
    
Plates-formes Apple

Suivez les instructions pour ajouter Firebase à votre application Apple.

Utilisez Swift Package Manager pour installer et gérer les dépendances Firebase.

  1. Dans Xcode, à partir de votre projet d'application ouvert, accédez à File > Swift Packages > Add Package Dependency (Fichier > Packages Swift > Ajouter une dépendance de package).
  2. Lorsque vous y êtes invité, ajoutez le dépôt du SDK des plates-formes Firebase Apple:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Choisissez la bibliothèque Firestore.
  5. Lorsque vous avez terminé, Xcode commence à résoudre et à télécharger automatiquement vos dépendances en arrière-plan.
Java
Android
  1. Suivez les instructions pour ajouter Firebase à votre application Android.
  2. Déclarez la dépendance pour la bibliothèque Android Firestore dans le fichier Gradle (généralement app/build.gradle) de votre module (au niveau de l'application) :
    implementation 'com.google.firebase:firebase-firestore:24.0.0'

    Si votre application utilise plusieurs bibliothèques Firebase, nous vous conseillons d'utiliser la nomenclature (BoM) Firebase Android, qui garantit que les versions de la bibliothèque Firebase de votre application sont toujours compatibles.

Kotlin + KTX
Android
  1. Suivez les instructions pour ajouter Firebase à votre application Android.
  2. Déclarez la dépendance pour la bibliothèque Android Firestore dans le fichier Gradle (généralement app/build.gradle) de votre module (au niveau de l'application) :
    implementation 'com.google.firebase:firebase-firestore-ktx:24.0.0'

    Si votre application utilise plusieurs bibliothèques Firebase, nous vous conseillons d'utiliser la nomenclature (BoM) Firebase Android, qui garantit que les versions de la bibliothèque Firebase de votre application sont toujours compatibles.

C++
  1. Suivez les instructions pour ajouter Firebase à votre projet C++.
  2. Interface C++ pour Android.
    • Dépendances Gradle. Ajoutez les éléments suivants à votre fichier Gradle (généralement app/build.gradle) de votre module (au niveau de l'application) :
              android.defaultConfig.externalNativeBuild.cmake {
                arguments "-DFIREBASE_CPP_SDK_DIR=$gradle.firebase_cpp_sdk_dir"
              }
      
              apply from: "$gradle.firebase_cpp_sdk_dir/Android/firebase_dependencies.gradle"
              firebaseCpp.dependencies {
                // earlier entries
                auth
                firestore
              }
              
    • Dépendances binaires. De même, la méthode recommandée pour obtenir les dépendances binaires consiste à ajouter ce qui suit à votre fichier CMakeLists.txt :
              add_subdirectory(${FIREBASE_CPP_SDK_DIR} bin/ EXCLUDE_FROM_ALL)
              set(firebase_libs firebase_auth firebase_firestore firebase_app)
              # Replace the target name below with the actual name of your target,
              # for example, "native-lib".
              target_link_libraries(${YOUR_TARGET_NAME_HERE} "${firebase_libs}")
              
  3. Pour configurer l'intégration au bureau, consultez la section Ajouter Firebase à votre projet C++.
Unity
  1. Suivez les instructions pour ajouter Firebase à votre projet Unity.
  2. Interface Unity pour Android.
  3. Lorsque vous compilez pour Android, activez ProGuarding pour éviter la limitation des fichiers DEX d'Android. Pour ce faire, dans l'éditeur Unity :

    1. Sélectionnez File (Fichier) > Build Settings (Paramètres de compilation).
    2. Définissez "Platform" (Plate-forme) sur "Android", puis cliquez sur "Switch Platform" (Changer de plate-forme).
    3. Cliquez sur Player Settings (Paramètres du lecteur).
    4. Dans l'UI principale de Unity, sous "Settings for Android" (Paramètres pour Android), sélectionnez "Publishing Settings" (Paramètres de publication).
    5. Dans la section "Minify" (Minimiser), passez les paramètres de version et de débogage de "None" (Aucun) à "ProGuard".

Initialiser Firestore

Initialiser une instance de Firestore :

Version Web 9

// Initialize Firestore through Firebase
import { initializeApp } from "firebase/app"
import { getFirestore } from "firebase/firestore"
const firebaseApp = initializeApp({
  apiKey: '### FIREBASE API KEY ###',
  authDomain: '### FIREBASE AUTH DOMAIN ###',
  projectId: '### CLOUD FIRESTORE PROJECT ID ###'
});

const db = getFirestore();
Les valeurs de "initializeApp" sont disponibles dans le fichier "firebaseConfig" de votre application Web. Pour savoir comment conserver les données lorsque l'appareil perd sa connexion, consultez la documentation Activer les données hors connexion.

Version Web 8

// Initialize Firestore through Firebase
firebase.initializeApp({
  apiKey: '### FIREBASE API KEY ###',
  authDomain: '### FIREBASE AUTH DOMAIN ###',
  projectId: '### CLOUD FIRESTORE PROJECT ID ###'
});

var db = firebase.firestore();
Les valeurs de "initializeApp" sont disponibles dans le fichier "firebaseConfig" de votre application Web. Pour savoir comment conserver les données lorsque l'appareil perd sa connexion, consultez la documentation Activer les données hors connexion.
Swift
Remarque : Ce produit n'est pas disponible sur les cibles watchOS et App Clip.
import Firebase

FirebaseApp.configure()

let db = Firestore.firestore()
Objective-C
Remarque : Ce produit n'est pas disponible sur les cibles watchOS et App Clip.
@import Firebase;

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

FIRFirestore *defaultFirestore = [FIRFirestore firestore];
  
Java
Android
// Access a Firestore instance from your Activity
  FirebaseFirestore db = FirebaseFirestore.getInstance();
Kotlin + KTX
Android
  // Access a Firestore instance from your Activity
  val db = Firebase.firestore
C++
// Make sure the call to `Create()` happens some time before you call Firestore::GetInstance().
App::Create();
Firestore* db = Firestore::GetInstance();
Unity
using Firebase.Firestore;
using Firebase.Extensions;
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;

Ajouter des données

Firestore stocke les données dans des documents, qui sont eux-mêmes stockés dans des collections. Firestore crée implicitement les collections et les documents nécessaires la première fois qu’une donnée est ajoutée à un document. Vous n'avez pas besoin de créer explicitement les collections ni les documents.

Créez une collection et un document à l'aide de l'exemple de code ci-dessous.

Version Web 9

import { collection, addDoc } from "firebase/firestore";

try {
  const docRef = await addDoc(collection(db, "users"), {
    first: "Ada",
    last: "Lovelace",
    born: 1815
  });
  console.log("Document written with ID: ", docRef.id);
} catch (e) {
  console.error("Error adding document: ", e);
}

Version Web 8

db.collection("users").add({
    first: "Ada",
    last: "Lovelace",
    born: 1815
})
.then((docRef) => {
    console.log("Document written with ID: ", docRef.id);
})
.catch((error) => {
    console.error("Error adding document: ", error);
});
Swift
Remarque : Ce produit n'est pas disponible sur les cibles watchOS et App Clip.
// Add a new document with a generated ID
var ref: DocumentReference? = nil
ref = db.collection("users").addDocument(data: [
    "first": "Ada",
    "last": "Lovelace",
    "born": 1815
]) { err in
    if let err = err {
        print("Error adding document: \(err)")
    } else {
        print("Document added with ID: \(ref!.documentID)")
    }
}
Objective-C
Remarque : Ce produit n'est pas disponible sur les cibles watchOS et App Clip.
// Add a new document with a generated ID
__block FIRDocumentReference *ref =
    [[self.db collectionWithPath:@"users"] addDocumentWithData:@{
      @"first": @"Ada",
      @"last": @"Lovelace",
      @"born": @1815
    } completion:^(NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error adding document: %@", error);
      } else {
        NSLog(@"Document added with ID: %@", ref.documentID);
      }
    }];
Java
Android
// Create a new user with a first and last name
Map<String, Object> user = new HashMap<>();
user.put("first", "Ada");
user.put("last", "Lovelace");
user.put("born", 1815);

// Add a new document with a generated ID
db.collection("users")
        .add(user)
        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
                Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Error adding document", e);
            }
        });
Kotlin + KTX
Android
// Create a new user with a first and last name
val user = hashMapOf(
        "first" to "Ada",
        "last" to "Lovelace",
        "born" to 1815
)

// Add a new document with a generated ID
db.collection("users")
    .add(user)
    .addOnSuccessListener { documentReference ->
        Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}")
    }
    .addOnFailureListener { e ->
        Log.w(TAG, "Error adding document", e)
    }
C++
// Add a new document with a generated ID
Future<DocumentReference> user_ref =
    db->Collection("users").Add({{"first", FieldValue::String("Ada")},
                                 {"last", FieldValue::String("Lovelace")},
                                 {"born", FieldValue::Integer(1815)}});

user_ref.OnCompletion([](const Future<DocumentReference>& future) {
  if (future.error() == Error::kErrorOk) {
    std::cout << "DocumentSnapshot added with ID: " << future.result()->id()
              << std::endl;
  } else {
    std::cout << "Error adding document: " << future.error_message() << std::endl;
  }
});
Unity
DocumentReference docRef = db.Collection("users").Document("alovelace");
Dictionary<string, object> user = new Dictionary<string, object>
{
	{ "First", "Ada" },
	{ "Last", "Lovelace" },
	{ "Born", 1815 },
};
docRef.SetAsync(user).ContinueWithOnMainThread(task => {
	Debug.Log("Added data to the alovelace document in the users collection.");
});

À présent, ajoutez un autre document à la collection users. Notez que ce document contient une paire clé-valeur (deuxième prénom) qui n'est pas présente dans le premier document. Les documents d'une collection peuvent contenir différents ensembles d'informations.

Version Web 9

// Add a second document with a generated ID.
import { addDoc, collection } from "firebase/firestore";

try {
  const docRef = await addDoc(collection(db, "users"), {
    first: "Alan",
    middle: "Mathison",
    last: "Turing",
    born: 1912
  });

  console.log("Document written with ID: ", docRef.id);
} catch (e) {
  console.error("Error adding document: ", e);
}

Version Web 8

// Add a second document with a generated ID.
db.collection("users").add({
    first: "Alan",
    middle: "Mathison",
    last: "Turing",
    born: 1912
})
.then((docRef) => {
    console.log("Document written with ID: ", docRef.id);
})
.catch((error) => {
    console.error("Error adding document: ", error);
});
Swift
Remarque : Ce produit n'est pas disponible sur les cibles watchOS et App Clip.
// Add a second document with a generated ID.
ref = db.collection("users").addDocument(data: [
    "first": "Alan",
    "middle": "Mathison",
    "last": "Turing",
    "born": 1912
]) { err in
    if let err = err {
        print("Error adding document: \(err)")
    } else {
        print("Document added with ID: \(ref!.documentID)")
    }
}
Objective-C
Remarque : Ce produit n'est pas disponible sur les cibles watchOS et App Clip.
// Add a second document with a generated ID.
__block FIRDocumentReference *ref =
    [[self.db collectionWithPath:@"users"] addDocumentWithData:@{
      @"first": @"Alan",
      @"middle": @"Mathison",
      @"last": @"Turing",
      @"born": @1912
    } completion:^(NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error adding document: %@", error);
      } else {
        NSLog(@"Document added with ID: %@", ref.documentID);
      }
    }];
Java
Android
// Create a new user with a first, middle, and last name
Map<String, Object> user = new HashMap<>();
user.put("first", "Alan");
user.put("middle", "Mathison");
user.put("last", "Turing");
user.put("born", 1912);

// Add a new document with a generated ID
db.collection("users")
        .add(user)
        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
                Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Error adding document", e);
            }
        });
Kotlin + KTX
Android
// Create a new user with a first, middle, and last name
val user = hashMapOf(
        "first" to "Alan",
        "middle" to "Mathison",
        "last" to "Turing",
        "born" to 1912
)

// Add a new document with a generated ID
db.collection("users")
    .add(user)
    .addOnSuccessListener { documentReference ->
        Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}")
    }
    .addOnFailureListener { e ->
        Log.w(TAG, "Error adding document", e)
    }
C++
db->Collection("users")
    .Add({{"first", FieldValue::String("Alan")},
          {"middle", FieldValue::String("Mathison")},
          {"last", FieldValue::String("Turing")},
          {"born", FieldValue::Integer(1912)}})
    .OnCompletion([](const Future<DocumentReference>& future) {
      if (future.error() == Error::kErrorOk) {
        std::cout << "DocumentSnapshot added with ID: "
                  << future.result()->id() << std::endl;
      } else {
        std::cout << "Error adding document: " << future.error_message()
                  << std::endl;
      }
    });
Unity
DocumentReference docRef = db.Collection("users").Document("aturing");
Dictionary<string, object> user = new Dictionary<string, object>
{
	{ "First", "Alan" },
	{ "Middle", "Mathison" },
	{ "Last", "Turing" },
	{ "Born", 1912 }
};
docRef.SetAsync(user).ContinueWithOnMainThread(task => {
	Debug.Log("Added data to the aturing document in the users collection.");
});

Lire des données

Pour vérifier rapidement que vous avez bien ajouté des données à Firestore, utilisez la visionneuse de données de la console Firebase.

Vous pouvez également utiliser la méthode get pour récupérer l'ensemble de la collection.

Version Web 9

import { collection, getDocs } from "firebase/firestore";

const querySnapshot = await getDocs(collection(db, "users"));
querySnapshot.forEach((doc) => {
  console.log(`${doc.id} => ${doc.data()}`);
});

Version Web 8

db.collection("users").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} => ${doc.data()}`);
    });
});
Swift
Remarque : Ce produit n'est pas disponible sur les cibles watchOS et App Clip.
db.collection("users").getDocuments() { (querySnapshot, err) in
    if let err = err {
        print("Error getting documents: \(err)")
    } else {
        for document in querySnapshot!.documents {
            print("\(document.documentID) => \(document.data())")
        }
    }
}
Objective-C
Remarque : Ce produit n'est pas disponible sur les cibles watchOS et App Clip.
[[self.db collectionWithPath:@"users"]
    getDocumentsWithCompletion:^(FIRQuerySnapshot * _Nullable snapshot,
                                 NSError * _Nullable error) {
      if (error != nil) {
        NSLog(@"Error getting documents: %@", error);
      } else {
        for (FIRDocumentSnapshot *document in snapshot.documents) {
          NSLog(@"%@ => %@", document.documentID, document.data);
        }
      }
    }];
Java
Android
db.collection("users")
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        Log.d(TAG, document.getId() + " => " + document.getData());
                    }
                } else {
                    Log.w(TAG, "Error getting documents.", task.getException());
                }
            }
        });
Kotlin + KTX
Android
db.collection("users")
        .get()
        .addOnSuccessListener { result ->
            for (document in result) {
                Log.d(TAG, "${document.id} => ${document.data}")
            }
        }
        .addOnFailureListener { exception ->
            Log.w(TAG, "Error getting documents.", exception)
        }
C++
Future<QuerySnapshot> users = db->Collection("users").Get();
users.OnCompletion([](const Future<QuerySnapshot>& future) {
  if (future.error() == Error::kErrorOk) {
    for (const DocumentSnapshot& document : future.result()->documents()) {
      std::cout << document << std::endl;
    }
  } else {
    std::cout << "Error getting documents: " << future.error_message()
              << std::endl;
  }
});
Unity
CollectionReference usersRef = db.Collection("users");
usersRef.GetSnapshotAsync().ContinueWithOnMainThread(task =>
{
  QuerySnapshot snapshot = task.Result;
  foreach (DocumentSnapshot document in snapshot.Documents)
  {
    Debug.Log(String.Format("User: {0}", document.Id));
    Dictionary<string, object> documentDictionary = document.ToDictionary();
    Debug.Log(String.Format("First: {0}", documentDictionary["First"]));
    if (documentDictionary.ContainsKey("Middle"))
    {
      Debug.Log(String.Format("Middle: {0}", documentDictionary["Middle"]));
    }

    Debug.Log(String.Format("Last: {0}", documentDictionary["Last"]));
    Debug.Log(String.Format("Born: {0}", documentDictionary["Born"]));
  }

  Debug.Log("Read all data from the users collection.");
});

Sécuriser vos données

Utilisez Firebase Authentication et les règles de sécurité Firestore pour sécuriser vos données dans Firestore.

Voici quelques règles de base qui vous aideront à bien démarrer. Vous pouvez modifier les règles de sécurité de votre projet dans l'onglet Règles de la console Firebase.

Authentification requise

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Mode verrouillé

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Mode test

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

Avant de déployer votre application Web, Android ou iOS en production, prenez également les mesures nécessaires pour vous assurer que seuls vos clients d'application peuvent accéder à vos données Firestore. Consultez la documentation sur App Check.

Regarder·un tutoriel vidéo

Pour obtenir des conseils précis sur les bibliothèques clientes mobiles et Web Firestore, regardez l'un des tutoriels vidéos ci-dessous :

Web
iOS
Android

Vous trouverez d'autres vidéos sur la chaîne YouTube de Firebase.

Étapes suivantes

Approfondissez vos connaissances sur les sujets suivants :