Inizia a utilizzare Firestore Enterprise

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

  1. 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.

  2. Apri il progetto nella console Firebase. Nel riquadro a sinistra, espandi Crea e seleziona Database Firestore.

  3. Fai clic su Crea database.

  4. Seleziona Enterprise per la modalità database.

  5. Seleziona Firestore in modalità nativa per la modalità di funzionamento, che supporta le operazioni di base e le operazioni della pipeline.

  6. Seleziona una località per il database.

  7. 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.

  8. 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

  1. Segui le istruzioni per aggiungere Firebase alla tua app web.
  2. L'Cloud Firestore SDK è disponibile come pacchetto npm.
    npm install firebase@12.13.0 --save
    Dovrai importare sia Firebase sia Cloud Firestore.
    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.

  1. In Xcode, con il progetto dell'app aperto, vai a File > Swift Packages > Add Package Dependency.
  2. Quando richiesto, aggiungi il repository dell'SDK delle piattaforme Apple di Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Scegli la libreria Firestore.
  5. Al termine, Xcode inizierà automaticamente a risolvere e a scaricare le tue dipendenze in background.
Android
  1. Segui le istruzioni per aggiungere Firebase alla tua app per Android.
  2. 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.kts o app/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")
    }

    Con la distinta base di Firebase Android, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase Android.

    (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
Nota: questo prodotto non è disponibile su watchOS e sui target App Clip.
// 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
Nota: questo prodotto non è disponibile su watchOS e sui target App Clip.
// 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
Nota: questo prodotto non è disponibile su watchOS e sui target App Clip.
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: