Questa guida rapida mostra come configurare Firestore Enterprise Edition, aggiungere dati e poi utilizzare le operazioni di base o le operazioni della pipeline per eseguire query sui dati che hai appena aggiunto nella Firebase console.
Cloud Firestore supporta gli SDK web o per dispositivi mobili e le librerie client server:
Cloud Firestore supporta gli SDK per Android, iOS, web e altro ancora. Insieme a Cloud Firestore Security Rules e Firebase Authentication, gli SDK web e per dispositivi mobili supportano architetture di app serverless in cui i client si connettono direttamente al tuo Cloud Firestore database.
Cloud Firestore supporta le librerie client server per Java, Node.js e Python. Utilizza queste librerie client per configurare ambienti server con privilegi e accesso completo al database. Scopri di più su queste librerie nella guida rapida per le librerie client server.
Creare un database Firestore Enterprise Edition
Se non l'hai già fatto, crea un progetto Firebase: nella Firebase console, fai clic su Aggiungi progetto, quindi segui le istruzioni sullo schermo per creare un progetto Firebase o per aggiungere i servizi Firebase a un progetto Google Cloud esistente.
Apri il progetto nella console Firebase. Nel riquadro a sinistra, espandi Crea e seleziona Database Firestore.
Fai clic su Crea database.
Seleziona Enterprise per la modalità database.
Seleziona Firestore in modalità nativa per la modalità di funzionamento, che supporta le operazioni di base e le operazioni della pipeline.
Seleziona una località per il database.
Seleziona una modalità di avvio per i tuoi Cloud Firestore Security Rules:
- Modalità di prova
Ideale per iniziare a utilizzare le librerie client web e per dispositivi mobili, ma consente a chiunque di leggere e sovrascrivere i dati. Dopo il test, assicurati di esaminare la sezione Proteggere i dati.
Per iniziare a utilizzare l'SDK web, per le piattaforme Apple o per l'SDK Android, seleziona la modalità di prova.
- Modalità di produzione
Nega tutte le operazioni di lettura e scrittura da client web e per dispositivi mobili. I server delle applicazioni autenticati (Python) possono comunque accedere al database.
Il set iniziale di Cloud Firestore Security Rules si applicherà al database Cloud Firestore predefinito. Se crei più database per il tuo progetto, puoi implementare Cloud Firestore Security Rules per ogni database.
Fai clic su Crea.
Quando abiliti Firestore Enterprise Edition, viene abilitata anche l'API in the Cloud API Manager.
Configurazione dell'ambiente di sviluppo
Aggiungi le dipendenze e le librerie client necessarie alla tua app.
Web
- Segui le istruzioni per aggiungere Firebase alla tua app web.
-
L'Cloud Firestore SDK è disponibile come pacchetto npm.
Dovrai importare sia Firebase sia Cloud Firestore.npm install firebase@12.13.0 --save
import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore";
iOS+
Segui le istruzioni per aggiungere Firebase alla tua app Apple.
Utilizza Swift Package Manager per installare e gestire le dipendenze di Firebase.
- In Xcode, con il progetto dell'app aperto, vai a File > Swift Packages > Add Package Dependency.
- Quando richiesto, aggiungi il repository dell'SDK delle piattaforme Apple di Firebase:
- Scegli la libreria Firestore.
- Al termine, Xcode inizierà automaticamente a risolvere e a scaricare le tue dipendenze in background.
https://github.com/firebase/firebase-ios-sdk
Android
- Segui le istruzioni per aggiungere Firebase alla tua app per Android.
- Utilizzando la
DBA Firebase per Android,
dichiara la dipendenza per la libreria Cloud Firestore per Android nel
tuo file Gradle del modulo (a livello di app)
(in genere
app/build.gradle.ktsoapp/build.gradle).dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.13.0")) // Declare the dependency for the Cloud Firestore library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-firestore") }
(Alternativa) Dichiara le dipendenze della libreria Firebase senza utilizzare la BoM
Se scegli di non utilizzare la Firebase BoM, devi specificare la versione di ogni libreria Firebase nella riga di dipendenza.
Tieni presente che se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare la BoM per gestire le versioni delle librerie, in modo da garantire che tutte le versioni siano compatibili.
dependencies { // Declare the dependency for the Cloud Firestore library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-firestore:26.3.0") }
Cerchi un modulo di libreria specifico per Kotlin? A partire dalla release di ottobre 2023, sia gli sviluppatori Kotlin sia quelli Java possono dipendere dal modulo della libreria principale (per i dettagli, consulta le domande frequenti su questa iniziativa).
Inizializzare Cloud Firestore
Inizializza un'istanza di Cloud Firestore:
Web
import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore"; // TODO: Replace the following with your app's Firebase project configuration // See: https://support.google.com/firebase/answer/7015592 const firebaseConfig = { FIREBASE_CONFIGURATION }; // Initialize Firebase const app = initializeApp(firebaseConfig); // When initializing Firestore, remember to use the name of the database you created earlier: const db = initializeFirestore(app, {}, 'your-new-enterprise-database');
Sostituisci FIREBASE_CONFIGURATION con
firebaseConfig della tua app web.
Per rendere persistenti i dati quando il dispositivo perde la connessione, consulta la documentazione Abilitare i dati offline.
Swift
import FirebaseCore import FirebaseFirestore FirebaseApp.configure() // When initializing Firestore, remember to use the name of the database you created earlier: let db = Firestore.firestore(database: "your-new-enterprise-database")
Kotlin
// Access a Cloud Firestore instance from your Activity // When initializing Firestore, remember to use the name of the database you created earlier: val firestore = FirebaseFirestore.getInstance("your-new-enterprise-database")
Java
// Access a Cloud Firestore instance from your Activity // When initializing Firestore, remember to use the name of the database you created earlier: FirebaseFirestore firestore = FirebaseFirestore.getInstance("your-new-enterprise-database");
Aggiungere dati utilizzando le operazioni di base
Per esplorare le operazioni di base e le operazioni della pipeline per l'esecuzione di query sui dati, aggiungi dati al database utilizzando le operazioni di base.
Cloud Firestore archivia i dati in documenti, che vengono archiviati in raccolte. Cloud Firestore crea raccolte e documenti in modo implicito la prima volta che aggiungi dati al documento. Non è necessario creare esplicitamente raccolte o documenti.
Crea una nuova raccolta e un documento utilizzando il seguente codice di esempio.
Web
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); }
Web
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
// Add a new document with a generated ID do { let ref = try await db.collection("users").addDocument(data: [ "first": "Ada", "last": "Lovelace", "born": 1815 ]) print("Document added with ID: \(ref.documentID)") } catch { print("Error adding document: \(error)") }
Kotlin
// 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) }
Java
// 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); } });
Ora aggiungi un altro documento alla raccolta users. Tieni presente che questo documento include una coppia chiave-valore (secondo nome) che non è presente nel primo documento. I documenti in una raccolta possono contenere diversi set di informazioni.
Web
// 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); }
Web
// 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
// Add a second document with a generated ID. do { let ref = try await db.collection("users").addDocument(data: [ "first": "Alan", "middle": "Mathison", "last": "Turing", "born": 1912 ]) print("Document added with ID: \(ref.documentID)") } catch { print("Error adding document: \(error)") }
Kotlin
// 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) }
Java
// 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); } });
Leggere i dati utilizzando le operazioni di base
Utilizza il visualizzatore di dati nella console Firebase per verificare rapidamente di aver aggiunto dati a Cloud Firestore.
Puoi anche utilizzare il metodo "get" per recuperare l'intera raccolta.
Web
import { collection, getDocs } from "firebase/firestore"; const querySnapshot = await getDocs(collection(db, "users")); querySnapshot.forEach((doc) => { console.log(`${doc.id} => ${doc.data()}`); });
Web
db.collection("users").get().then((querySnapshot) => { querySnapshot.forEach((doc) => { console.log(`${doc.id} => ${doc.data()}`); }); });
Swift
do { let snapshot = try await db.collection("users").getDocuments() for document in snapshot.documents { print("\(document.documentID) => \(document.data())") } } catch { print("Error getting documents: \(error)") }
Kotlin
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) }
Java
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()); } } });
Leggere i dati utilizzando le operazioni della pipeline
Ora puoi confrontare l'esperienza di query della pipeline con l'esperienza di query di base.
Web
// The import/require of "firebase/firestore/pipelines" has a side-effect // of extending the Firestore class with the `.pipeline()` method. // Without this import/require, you will not be able to create a Pipeline. // import { execute } from "firebase/firestore/pipelines"; const readDataPipeline = db.pipeline() .collection("users"); // Execute the pipeline and handle the result try { const querySnapshot = await execute(readDataPipeline); querySnapshot.results.forEach((result) => { console.log(`${result.id} => ${result.data()}`); }); } catch (error) { console.error("Error getting documents: ", error); }
Swift
do { // Initialize a Firestore Pipeline instance and specify the "users" collection as the // input stage. let snapshot = try await db.pipeline() .collection("users") .execute() // Execute the pipeline to retrieve documents. // Iterate through the documents in the pipeline results, similar to a regular query // snapshot. for result in snapshot.results { print("\(result.id ?? "no ID") => \(result.data)") } } catch { print("Error getting documents with pipeline: \(error)") }
Kotlin
val readDataPipeline = db.pipeline() .collection("users") // Execute the pipeline and handle the result readDataPipeline.execute() .addOnSuccessListener { result -> for (document in result) { println("${document.getId()} => ${document.getData()}") } } .addOnFailureListener { exception -> println("Error getting documents: $exception") }
Java
Pipeline readDataPipeline = db.pipeline() .collection("users"); readDataPipeline.execute() .addOnSuccessListener(new OnSuccessListener<Pipeline.Snapshot>() { @Override public void onSuccess(Pipeline.Snapshot snapshot) { for (PipelineResult result : snapshot.getResults()) { System.out.println(result.getId() + " => " + result.getData()); } } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { System.out.println("Error getting documents: " + e); } });
Proteggere i dati per gli SDK web e per dispositivi mobili
Se utilizzi l'SDK web, per Android o per le piattaforme Apple, utilizza Firebase Authentication e Cloud Firestore Security Rules per proteggere i dati in Cloud Firestore.
Ecco alcuni set di regole di base che puoi utilizzare per iniziare. Puoi modificare le regole di sicurezza nella scheda Regole della console.
Autenticazione obbligatoria
// Allow read/write access to a document keyed by the user's UID
service cloud.firestore {
match /databases/{database}/documents {
match /users/{uid} {
allow read, write: if request.auth != null && request.auth.uid == uid;
}
}
}
Modalità di produzione
// Deny read/write access to all users under any conditions
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
Prima di implementare l'app web, per Android o iOS in produzione, adotta anche misure per assicurarti che solo i client dell'app possano accedere ai dati Cloud Firestore. Consulta la documentazione di App Check.
Se utilizzi uno degli SDK server, utilizza Identity and Access Management (IAM) per proteggere i dati in Cloud Firestore.
Passaggi successivi
Approfondisci la tua conoscenza delle operazioni di base e delle operazioni della pipeline con i seguenti argomenti:
- Scopri di più sull'esecuzione di query con le operazioni di base
- Scopri di più sull'esecuzione di query con le operazioni della pipeline.
- Scopri come migliorare gli strumenti di sviluppo AI per eseguire le attività in modo più efficace e utilizzare le Cloud Firestore best practice (ad esempio la scrittura Cloud Firestore Security Rules) con le competenze dell'agente Firebase.