Inizia a utilizzare Cloud Firestore

Questa guida rapida mostra come configurare Cloud Firestore, aggiungere dati e poi visualizzare i dati appena aggiunti nella console Firebase.

Crea un database Cloud Firestore

  1. Se non lo hai già fatto, crea un progetto Firebase: Console Firebase, fai clic su Aggiungi progetto. e poi segui le istruzioni sullo schermo per creare un progetto Firebase o aggiungere servizi Firebase a un progetto Google Cloud esistente.

  2. Vai alla sezione Cloud Firestore dell' Console Firebase: Ti verrà chiesto di selezionare un progetto Firebase esistente. Segui il flusso di lavoro per la creazione del database.

  3. Seleziona una modalità iniziale per il tuo Cloud Firestore Security Rules:

    Modalità di test

    Ottima per iniziare a utilizzare le librerie client mobile e web, ma consente a chiunque di leggere e sovrascrivere i tuoi dati. Dopo il test, effettua assicurati di rivedere la sezione Proteggere i tuoi dati.

    Per iniziare a utilizzare il web, le piattaforme Apple o l'SDK Android, seleziona la modalità di test.

    Modalità di blocco

    Nega tutte le operazioni di lettura e scrittura da client web e mobile. I server delle applicazioni autenticati (C#, Go, Java, Node.js, PHP, Python o Ruby) può ancora accedere al tuo database.

    Per iniziare a utilizzare C#, Go, Java, Node.js, PHP, Python o Ruby libreria client del server, seleziona la modalità di blocco.

    L'insieme iniziale di Cloud Firestore Security Rules verrà applicato all'impostazione predefinita Database Cloud Firestore. Se crei più database per il tuo progetto, puoi eseguire il deployment di Cloud Firestore Security Rules per ogni database.

  4. Seleziona una località per il tuo database.

    • Questa impostazione di geolocalizzazione corrisponde a quella del progetto località Google Cloud Platform Cloud. Tieni presente che questa località verrà utilizzata per i servizi Google Cloud nel tuo progetto che richiedono l'impostazione della località, in particolare, Cloud Storage e i tuoi App Engine, che richiesta se utilizzi Cloud Scheduler).

    • Se non riesci a selezionare una località, significa che il progetto ha una località delle risorse Google Cloud predefinita. È stato impostato durante il progetto creazione o configurazione di un altro servizio che richiede una posizione dell'ambientazione.

    di Gemini Advanced.
  5. Fai clic su Fine.

di Gemini Advanced.

Se abiliti Cloud Firestore, viene abilitata anche l'API nella Gestore API Cloud:

Configurazione dell'ambiente di sviluppo

Aggiungi le dipendenze e le librerie client necessarie alla tua app.

Web

  1. Segui le istruzioni per aggiungi Firebase alla tua app web.
  2. Aggiungi le librerie Firebase e Cloud Firestore alla tua app:
    <script src="https://www.gstatic.com/firebasejs/10.13.1/firebase-app-compat.js"></script>
    <script src="https://www.gstatic.com/firebasejs/10.13.1/firebase-firestore-compat.js"></script>
    L'SDK Cloud Firestore è disponibile anche come pacchetto npm.
    npm install firebase@10.13.1 --save
    Dovrai richiedere manualmente sia Firebase che Cloud Firestore.
    import firebase from "firebase/compat/app";
    // Required for side-effects
    import "firebase/firestore";

Web

  1. Segui le istruzioni per aggiungi Firebase alla tua app web.
  2. L'SDK Cloud Firestore è disponibile come pacchetto npm.
    npm install firebase@10.13.1 --save
    Dovrai importare sia Firebase sia Cloud Firestore.
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
di Gemini Advanced.
iOS+

Segui le istruzioni per aggiungi Firebase alla tua app Apple.

Usa Swift Package Manager per installare e gestire le dipendenze di Firebase.

  1. In Xcode, con il progetto dell'app aperto, vai a File > Pacchetti Swift > Aggiungi dipendenza pacchetto.
  2. Quando richiesto, aggiungi il repository dell'SDK delle piattaforme Apple Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Scegli la libreria Firestore.
  5. Al termine, Xcode inizierà automaticamente a risolvere e scaricare il le dipendenze in background.
Android
  1. Segui le istruzioni per aggiungi Firebase alla tua app Android.
  2. Utilizzando la disposta base di Firebase per Android, dichiara la dipendenza per la libreria Cloud Firestore per Android nel file Gradle del modulo (a livello di app) (di solito app/build.gradle.kts o app/build.gradle).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.2.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")
    }

    Utilizzando i comandi distinta base di Firebase Android, la tua app utilizzerà sempre versioni compatibili di Firebase Android librerie.

    (alternativa) Dichiara le dipendenze della libreria Firebase senza utilizzare il token BoM

    Se scegli di non utilizzare Firebase BoM, devi specificare ogni Versione della libreria Firebase nella riga di dipendenza.

    Tieni presente che se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare BoM per gestire le versioni delle librerie, in modo da garantire la compatibilità di tutte le versioni.

    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:25.1.0")
    }

    Cerchi un modulo della libreria specifico per Kotlin? A partire dal Release di ottobre 2023, gli sviluppatori Kotlin e Java possono dipendere dal modulo della libreria principale (per i dettagli, consulta Domande frequenti su questa iniziativa).

Dart

  1. Se non lo hai già fatto, configura e inizializza Firebase nell'app Flutter.
  2. Dalla radice del progetto Flutter, esegui questo comando: Installa il plug-in:
    flutter pub add cloud_firestore
  3. Al termine, ricrea l'applicazione Flutter:
    flutter run
  4. (Facoltativo) Migliora iOS e i tempi di compilazione di macOS includendo precompilato.

    Attualmente, l'SDK Firestore per iOS dipende da codice che può prendere di più di 5 minuti per creare in Xcode. Per ridurre in modo significativo i tempi di compilazione, puoi utilizzare una versione precompilata aggiungendo questa riga al blocco target 'Runner' do nel Podfile:

    target 'Runner' do
      use_frameworks!
      use_modular_headers!
    
      pod 'FirebaseFirestore',
        :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git',
        :tag => 'IOS_SDK_VERSION'
    
      flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
      target 'RunnerTests' do
        inherit! :search_paths
      end
    end

    Sostituisci IOS_SDK_VERSION con la versione di Firebase per iOS SDK specificato in firebase_core firebase_sdk_version.rb: . Se non utilizzi l'ultima versione di firebase_core, cerca questo file nel pacchetto Pub locale Cache (di solito ~/.pub-cache).

    Inoltre, assicurati di aver eseguito l'upgrade di CocoaPods alla versione 1.9.1 o superiore:

    gem install cocoapods

    Per ulteriori informazioni, consulta problema su GitHub.

Java
  1. Aggiungi l'SDK Admin Firebase alla tua app:
    • Con Gradle:
      compile 'com.google.firebase:firebase-admin:1.32.0'
    • Utilizzo di Maven:
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>1.32.0</version>
      </dependency>
           
  2. Segui le istruzioni riportate di seguito per inizializzare Cloud Firestore con le credenziali appropriate nel tuo ambiente.
Python
  1. Aggiungi l'SDK Firebase Admin alla tua app Python:
    pip install --upgrade firebase-admin
  2. Segui le istruzioni riportate di seguito per inizializzare Cloud Firestore con le credenziali corrette nel tuo ambiente.
C++
  1. Segui le istruzioni per aggiungi Firebase al tuo progetto C++.
  2. Interfaccia C++ per Android.
    • Dipendenze di Gradle. Aggiungi quanto segue al modulo file Gradle (a livello di app) (di solito app/build.gradle):
              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
              }
              
    • Dipendenze binarie. Analogamente, il modo consigliato per le dipendenze binarie consiste nell'aggiungere quanto segue al tuo CMakeLists.txt file:
              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. Per configurare l'integrazione desktop, consulta Aggiungere Firebase al progetto C++.
Unity
  1. Segui le istruzioni per aggiungi Firebase al tuo account Unity progetto.
  2. Usa l'interfaccia Unity per configurare il tuo progetto al fine di minimizzare le build Android.
  3. Devi minimizzare la build per evitare il messaggio Error while merging dex archives.

    • L'opzione è disponibile in Impostazioni del player > Android > Pubblicazione in corso... Impostazioni > Minimizza.
    • Le opzioni possono variare a seconda della versione di Unity, quindi fai riferimento alle documentazione Unity ufficiale e Guida al debug della build di Firebase Unity.
    • Se, dopo aver abilitato la minimizzazione, il numero di metodi a cui viene fatto riferimento supera il limite, un'altra opzione è attivare multidex in:
      • mainTemplate.gradle se l'opzione Modello Gradle personalizzato in Impostazioni del player è abilitata
      • o il file build.gradle a livello di modulo, se usi Android Studio per creare il progetto esportato.
Node.js
  1. Aggiungi l'SDK Admin Firebase alla tua app:
    npm install firebase-admin --save
  2. Segui le istruzioni riportate di seguito per inizializzare Cloud Firestore con le credenziali corrette nel tuo ambiente.
Vai
  1. Aggiungi l'SDK Firebase Admin alla tua app Go:
    go get firebase.google.com/go
  2. Segui le istruzioni riportate di seguito per inizializzare Cloud Firestore con le credenziali appropriate nel tuo ambiente.
PHP
  1. Le librerie client del server Cloud Firestore (Java, Node.js, Python, Go, PHP, C# e Ruby) utilizzano Credenziali predefinite dell'applicazione Google per l'autenticazione.
    • Per eseguire l'autenticazione dall'ambiente di sviluppo, imposta GOOGLE_APPLICATION_CREDENTIALS di ambiente per puntare a un file chiave dell'account di servizio JSON. Puoi creare un file della chiave della pagina Credenziali della console API.
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Nel tuo ambiente di produzione, non è necessaria l'autenticazione se esegui l'applicazione su App Engine o Compute Engine, utilizzando lo stesso progetto che utilizzi per Cloud Firestore. Altrimenti, configurare un account di servizio.
  2. Installa e abilita l'estensione gRPC per PHP, che dovrai usare la libreria client.
  3. Aggiungi la libreria PHP di Cloud Firestore alla tua app:
    composer require google/cloud-firestore
C#
  1. Le librerie client server Cloud Firestore (Java, Node.js, Python, Go, PHP, C# e Ruby) utilizzano le Credenziali predefinite dell'applicazione Google per l'autenticazione.
    • Per eseguire l'autenticazione dall'ambiente di sviluppo, imposta GOOGLE_APPLICATION_CREDENTIALS di ambiente per puntare a un file di chiave dell'account di servizio JSON. Puoi creare un file della chiave della pagina Credenziali della console API.
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Nell'ambiente di produzione, non è necessario autenticarsi se esegui l'applicazione su App Engine o Compute Engine utilizzando lo stesso progetto utilizzato per Cloud Firestore. Altrimenti, configurare un account di servizio.
  2. Aggiungi la libreria C# di Cloud Firestore alla tua app nel file .csproj:
    <ItemGroup>
      <PackageReference Include="Google.Cloud.Firestore" Version="1.1.0-beta01" />
    </ItemGroup>
  3. Aggiungi quanto segue al tuo file Program.cs:
    using Google.Cloud.Firestore;
Ruby
  1. Le librerie client del server Cloud Firestore (Java, Node.js, Python, Go, PHP, C# e Ruby) utilizzano Credenziali predefinite dell'applicazione Google per l'autenticazione.
    • Per eseguire l'autenticazione dall'ambiente di sviluppo, imposta GOOGLE_APPLICATION_CREDENTIALS di ambiente per puntare a un file chiave dell'account di servizio JSON. Puoi creare un file della chiave della pagina Credenziali della console API.
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Nel tuo ambiente di produzione, non è necessaria l'autenticazione se esegui l'applicazione su App Engine o Compute Engine, utilizzando lo stesso progetto che utilizzi per Cloud Firestore. Altrimenti, configurare un account di servizio.
  2. Aggiungi la libreria Ruby di Cloud Firestore alla tua app in Gemfile:
    gem "google-cloud-firestore"
  3. Installa le dipendenze da Gemfile utilizzando:
    bundle install

(Facoltativo) Prototipazione e test con Firebase Local Emulator Suite

Per gli sviluppatori di app mobile, prima di parlare di come la tua app scrive e legge da Cloud Firestore, presentiamo un insieme di strumenti che puoi utilizzare per prototipare e testare la funzionalità di Cloud Firestore: Firebase Local Emulator Suite. Se stai provando diversi modelli di dati, ottimizzare le regole di sicurezza o trovare il modo più conveniente di interagire con il backend, potendo lavorare localmente senza può essere un'ottima idea.

Un emulatore Cloud Firestore fa parte di Local Emulator Suite, che consente alla tua app di interagire con i contenuti e la configurazione del tuo database emulato, nonché facoltativamente le risorse di progetto emulate (funzioni, altri database, e regole di sicurezza).

Per utilizzare l'emulatore Cloud Firestore sono necessari solo pochi passaggi:

  1. Aggiunta di una riga di codice alla configurazione di test dell'app per connettersi all'emulatore.
  2. Dalla radice della directory del progetto locale, in esecuzione di firebase emulators:start.
  3. Effettuare chiamate dal codice prototipo della tua app utilizzando una piattaforma Cloud Firestore come di consueto.

È disponibile una procedura dettagliata che coinvolge Cloud Firestore e Cloud Functions. Consulta anche l'introduzione a Local Emulator Suite.

Inizializza 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);


// Initialize Cloud Firestore and get a reference to the service
const db = getFirestore(app);

Sostituisci FIREBASE_CONFIGURATION con firebaseConfig

Per rendere persistenti i dati quando il dispositivo perde la connessione, consulta la documentazione relativa all'attivazione dei dati offline.

Web

import firebase from "firebase/app";
import "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
firebase.initializeApp(firebaseConfig);


// Initialize Cloud Firestore and get a reference to the service
const db = firebase.firestore();

Sostituisci FIREBASE_CONFIGURATION con firebaseConfig

Per rendere persistenti i dati quando il dispositivo perde la connessione, consulta la documentazione relativa all'attivazione dei dati offline.

Swift
Nota: questo prodotto non è disponibile su watchOS e sui target di App Clip.
import FirebaseCore
import FirebaseFirestore
FirebaseApp.configure()

let db = Firestore.firestore()
Objective-C
Nota: questo prodotto non è disponibile su watchOS e sui target di App Clip.
@import FirebaseCore;
@import FirebaseFirestore;

// Use Firebase library to configure APIs
[FIRApp configure];
  
FIRFirestore *defaultFirestore = [FIRFirestore firestore];

Kotlin+KTX

// Access a Cloud Firestore instance from your Activity
val db = Firebase.firestore

Java

// Access a Cloud Firestore instance from your Activity
FirebaseFirestore db = FirebaseFirestore.getInstance();

Dart

db = FirebaseFirestore.instance;
Java
L'SDK Cloud Firestore viene inizializzato in modi diversi a seconda del tuo ambiente. Di seguito sono riportati i metodi più comuni. Per un riferimento completo, vedi Inizializza l'SDK Admin.
  • Inizializza il giorno Google Cloud
    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.cloud.firestore.Firestore;
    
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    
    // Use the application default credentials
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(credentials)
        .setProjectId(projectId)
        .build();
    FirebaseApp.initializeApp(options);
    
    Firestore db = FirestoreClient.getFirestore();
  • Eseguire l'inizializzazione sul tuo server

    Per utilizzare l'SDK Admin Firebase sul tuo server, utilizza un account di servizio.

    Vai a IAM e amministratore > Account di servizio nella console Google Cloud. Genera una nuova chiave privata e salva il file JSON . Quindi utilizza il file per inizializzare l'SDK:

    import com.google.auth.oauth2.GoogleCredentials;
    import com.google.cloud.firestore.Firestore;
    
    import com.google.firebase.FirebaseApp;
    import com.google.firebase.FirebaseOptions;
    
    // Use a service account
    InputStream serviceAccount = new FileInputStream("path/to/serviceAccount.json");
    GoogleCredentials credentials = GoogleCredentials.fromStream(serviceAccount);
    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(credentials)
        .build();
    FirebaseApp.initializeApp(options);
    
    Firestore db = FirestoreClient.getFirestore();
  • Python
    L'SDK Cloud Firestore viene inizializzato in modi diversi a seconda del tuo ambiente. Di seguito sono riportati i metodi più comuni. Per un riferimento completo, consulta Inizializzare SDK Admin.
  • Eseguire l'inizializzazione il giorno Google Cloud
    import firebase_admin
    from firebase_admin import firestore
    
    # Application Default credentials are automatically created.
    app = firebase_admin.initialize_app()
    db = firestore.client()

    Per inizializzare l'SDK è possibile utilizzare anche una credenziale predefinita dell'applicazione esistente.

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use the application default credentials.
    cred = credentials.ApplicationDefault()
    
    firebase_admin.initialize_app(cred)
    db = firestore.client()
  • Inizializza sul tuo server

    Per utilizzare l'SDK Admin Firebase sul tuo server, utilizza un account di servizio.

    Vai a IAM e amministratore > Account di servizio nella console Google Cloud. Genera una nuova chiave privata e salva il file JSON . Quindi utilizza il file per inizializzare l'SDK:

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore
    
    # Use a service account.
    cred = credentials.Certificate('path/to/serviceAccount.json')
    
    app = firebase_admin.initialize_app(cred)
    
    db = firestore.client()
  • Python

    L'SDK Cloud Firestore viene inizializzato in modi diversi a seconda del tuo ambiente. Di seguito sono riportati i metodi più comuni. Per un riferimento completo, vedi Inizializza l'SDK Admin.
  • Eseguire l'inizializzazione il giorno Google Cloud
    import firebase_admin
    from firebase_admin import firestore_async
    
    # Application Default credentials are automatically created.
    app = firebase_admin.initialize_app()
    db = firestore_async.client()

    Per inizializzare l'SDK è possibile utilizzare anche una credenziale predefinita dell'applicazione esistente.

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore_async
    
    # Use the application default credentials.
    cred = credentials.ApplicationDefault()
    
    firebase_admin.initialize_app(cred)
    db = firestore_async.client()
  • Inizializza sul tuo server

    Per utilizzare l'SDK Admin Firebase sul tuo server, utilizza un account di servizio.

    Vai a IAM e amministratore > Account di servizio nella console Google Cloud. Genera una nuova chiave privata e salva il file JSON . Quindi utilizza il file per inizializzare l'SDK:

    import firebase_admin
    from firebase_admin import credentials
    from firebase_admin import firestore_async
    
    # Use a service account.
    cred = credentials.Certificate('path/to/serviceAccount.json')
    
    app = firebase_admin.initialize_app(cred)
    
    db = firestore_async.client()
  • C++
    // Make sure the call to `Create()` happens some time before you call Firestore::GetInstance().
    App::Create();
    Firestore* db = Firestore::GetInstance();
    Node.js
    L'SDK Cloud Firestore viene inizializzato in modi diversi a seconda del tuo ambiente. Di seguito sono riportati i metodi più comuni. Per un riferimento completo, consulta Inizializzare SDK Admin.
    • Inizializza il giorno Cloud Functions
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      initializeApp();
      
      const db = getFirestore();
      
    • Inizializza il giorno Google Cloud
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      initializeApp({
        credential: applicationDefault()
      });
      
      const db = getFirestore();
    • Inizializza sul tuo server

      Per utilizzare l'SDK Admin Firebase sul tuo server (o su qualsiasi altro ambiente Node.js), Utilizza un account di servizio. Vai a IAM e amministratore > Account di servizio nella console Google Cloud. Genera una nuova chiave privata e salva il file JSON. Quindi utilizza il file per inizializzare l'SDK:

      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      const serviceAccount = require('./path/to/serviceAccountKey.json');
      
      initializeApp({
        credential: cert(serviceAccount)
      });
      
      const db = getFirestore();
      
    Vai
    L'SDK Cloud Firestore viene inizializzato in modi diversi a seconda del tuo ambiente. Di seguito sono riportati i metodi più comuni. Per un riferimento completo, vedi Inizializza l'SDK Admin.
  • Inizializza il giorno Google Cloud
    import (
      "log"
    
      firebase "firebase.google.com/go"
      "google.golang.org/api/option"
    )
    
    // Use the application default credentials
    ctx := context.Background()
    conf := &firebase.Config{ProjectID: projectID}
    app, err := firebase.NewApp(ctx, conf)
    if err != nil {
      log.Fatalln(err)
    }
    
    client, err := app.Firestore(ctx)
    if err != nil {
      log.Fatalln(err)
    }
    defer client.Close()
  • Inizializza sul tuo server

    Per utilizzare l'SDK Firebase Admin sul tuo server, utilizza un account di servizio.

    Vai a IAM e amministratore > Account di servizio nella console Google Cloud. Genera una nuova chiave privata e salva il file JSON . Quindi utilizza il file per inizializzare l'SDK:

    import (
      "log"
    
      firebase "firebase.google.com/go"
      "google.golang.org/api/option"
    )
    
    // Use a service account
    ctx := context.Background()
    sa := option.WithCredentialsFile("path/to/serviceAccount.json")
    app, err := firebase.NewApp(ctx, nil, sa)
    if err != nil {
      log.Fatalln(err)
    }
    
    client, err := app.Firestore(ctx)
    if err != nil {
      log.Fatalln(err)
    }
    defer client.Close()
  • PHP

    PHP

    Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client Cloud Firestore.

    use Google\Cloud\Firestore\FirestoreClient;
    
    /**
     * Initialize Cloud Firestore with default project ID.
     */
    function setup_client_create(string $projectId = null)
    {
        // Create the Cloud Firestore client
        if (empty($projectId)) {
            // The `projectId` parameter is optional and represents which project the
            // client will act on behalf of. If not supplied, the client falls back to
            // the default project inferred from the environment.
            $db = new FirestoreClient();
            printf('Created Cloud Firestore client with default project ID.' . PHP_EOL);
        } else {
            $db = new FirestoreClient([
                'projectId' => $projectId,
            ]);
            printf('Created Cloud Firestore client with project ID: %s' . PHP_EOL, $projectId);
        }
    }
    Unity
    using Firebase.Firestore;
    using Firebase.Extensions;
    FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
    C#

    C#

    Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client Cloud Firestore.

    FirestoreDb db = FirestoreDb.Create(project);
    Console.WriteLine("Created Cloud Firestore client with project ID: {0}", project);
    Ruby
    require "google/cloud/firestore"
    
    # The `project_id` parameter is optional and represents which project the
    # client will act on behalf of. If not supplied, the client falls back to the
    # default project inferred from the environment.
    firestore = Google::Cloud::Firestore.new project_id: project_id
    
    puts "Created Cloud Firestore client with given project ID."

    Aggiungi dati

    Cloud Firestore archivia i dati in Documenti, che sono archiviati nelle Raccolte. Cloud Firestore crea raccolte e documenti in modo implicito la prima volta che aggiungi dati al documento. Non è necessario specificare creare 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 di 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)")
    }
    Objective-C
    Nota: questo prodotto non è disponibile su watchOS e sui target di 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);
          }
        }];

    Kotlin+KTX

    // 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);
                }
            });

    Dart

    // Create a new user with a first and last name
    final user = <String, dynamic>{
      "first": "Ada",
      "last": "Lovelace",
      "born": 1815
    };
    
    // Add a new document with a generated ID
    db.collection("users").add(user).then((DocumentReference doc) =>
        print('DocumentSnapshot added with ID: ${doc.id}'));
    Java
    DocumentReference docRef = db.collection("users").document("alovelace");
    // Add document data  with id "alovelace" using a hashmap
    Map<String, Object> data = new HashMap<>();
    data.put("first", "Ada");
    data.put("last", "Lovelace");
    data.put("born", 1815);
    //asynchronously write data
    ApiFuture<WriteResult> result = docRef.set(data);
    // ...
    // result.get() blocks on response
    System.out.println("Update time : " + result.get().getUpdateTime());
    Python
    doc_ref = db.collection("users").document("alovelace")
    doc_ref.set({"first": "Ada", "last": "Lovelace", "born": 1815})

    Python

    doc_ref = db.collection("users").document("alovelace")
    await doc_ref.set({"first": "Ada", "last": "Lovelace", "born": 1815})
    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;
      }
    });
    Node.js
    const docRef = db.collection('users').doc('alovelace');
    
    await docRef.set({
      first: 'Ada',
      last: 'Lovelace',
      born: 1815
    });
    Vai
    _, _, err := client.Collection("users").Add(ctx, map[string]interface{}{
    	"first": "Ada",
    	"last":  "Lovelace",
    	"born":  1815,
    })
    if err != nil {
    	log.Fatalf("Failed adding alovelace: %v", err)
    }
    PHP

    PHP

    Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client di Cloud Firestore.

    $docRef = $db->collection('samples/php/users')->document('alovelace');
    $docRef->set([
        'first' => 'Ada',
        'last' => 'Lovelace',
        'born' => 1815
    ]);
    printf('Added data to the lovelace document in the users collection.' . PHP_EOL);
    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.");
    });
    C#
    DocumentReference docRef = db.Collection("users").Document("alovelace");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
        { "First", "Ada" },
        { "Last", "Lovelace" },
        { "Born", 1815 }
    };
    await docRef.SetAsync(user);
    Ruby
    doc_ref = firestore.doc "#{collection_path}/alovelace"
    
    doc_ref.set(
      {
        first: "Ada",
        last:  "Lovelace",
        born:  1815
      }
    )
    
    puts "Added data to the alovelace document in the users collection."

    Ora aggiungi un altro documento alla raccolta users. Tieni presente che questo documento Includa una coppia chiave-valore (secondo nome) che non compare nella prima documento. I documenti di una raccolta possono contenere diversi insiemi 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 di 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)")
    }
    Objective-C
    Nota: questo prodotto non è disponibile su watchOS e sui target di 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);
          }
        }];

    Kotlin+KTX

    // 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);
                }
            });

    Dart

    // Create a new user with a first and last name
    final user = <String, dynamic>{
      "first": "Alan",
      "middle": "Mathison",
      "last": "Turing",
      "born": 1912
    };
    
    // Add a new document with a generated ID
    db.collection("users").add(user).then((DocumentReference doc) =>
        print('DocumentSnapshot added with ID: ${doc.id}'));
    Java
    DocumentReference docRef = db.collection("users").document("aturing");
    // Add document data with an additional field ("middle")
    Map<String, Object> data = new HashMap<>();
    data.put("first", "Alan");
    data.put("middle", "Mathison");
    data.put("last", "Turing");
    data.put("born", 1912);
    
    ApiFuture<WriteResult> result = docRef.set(data);
    System.out.println("Update time : " + result.get().getUpdateTime());
    Python
    doc_ref = db.collection("users").document("aturing")
    doc_ref.set({"first": "Alan", "middle": "Mathison", "last": "Turing", "born": 1912})

    Python

    doc_ref = db.collection("users").document("aturing")
    await doc_ref.set(
        {"first": "Alan", "middle": "Mathison", "last": "Turing", "born": 1912}
    )
    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;
          }
        });
    Node.js
    const aTuringRef = db.collection('users').doc('aturing');
    
    await aTuringRef.set({
      'first': 'Alan',
      'middle': 'Mathison',
      'last': 'Turing',
      'born': 1912
    });
    Vai
    _, _, err = client.Collection("users").Add(ctx, map[string]interface{}{
    	"first":  "Alan",
    	"middle": "Mathison",
    	"last":   "Turing",
    	"born":   1912,
    })
    if err != nil {
    	log.Fatalf("Failed adding aturing: %v", err)
    }
    PHP

    PHP

    Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client di Cloud Firestore.

    $docRef = $db->collection('samples/php/users')->document('aturing');
    $docRef->set([
        'first' => 'Alan',
        'middle' => 'Mathison',
        'last' => 'Turing',
        'born' => 1912
    ]);
    printf('Added data to the aturing document in the users collection.' . PHP_EOL);
    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.");
    });
    C#
    DocumentReference docRef = db.Collection("users").Document("aturing");
    Dictionary<string, object> user = new Dictionary<string, object>
    {
        { "First", "Alan" },
        { "Middle", "Mathison" },
        { "Last", "Turing" },
        { "Born", 1912 }
    };
    await docRef.SetAsync(user);
    Ruby
    doc_ref = firestore.doc "#{collection_path}/aturing"
    
    doc_ref.set(
      {
        first:  "Alan",
        middle: "Mathison",
        last:   "Turing",
        born:   1912
      }
    )
    
    puts "Added data to the aturing document in the users collection."

    Lettura di dati

    Utilizzare i dati visualizzatore nel Console di Firebase per verificare rapidamente l'aggiunta di 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 di 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)")
    }
    Objective-C
    Nota: questo prodotto non è disponibile su watchOS e sui target di 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);
            }
          }
        }];

    Kotlin+KTX

    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());
                    }
                }
            });

    Dart

    await db.collection("users").get().then((event) {
      for (var doc in event.docs) {
        print("${doc.id} => ${doc.data()}");
      }
    });
    Java
    // asynchronously retrieve all users
    ApiFuture<QuerySnapshot> query = db.collection("users").get();
    // ...
    // query.get() blocks on response
    QuerySnapshot querySnapshot = query.get();
    List<QueryDocumentSnapshot> documents = querySnapshot.getDocuments();
    for (QueryDocumentSnapshot document : documents) {
      System.out.println("User: " + document.getId());
      System.out.println("First: " + document.getString("first"));
      if (document.contains("middle")) {
        System.out.println("Middle: " + document.getString("middle"));
      }
      System.out.println("Last: " + document.getString("last"));
      System.out.println("Born: " + document.getLong("born"));
    }
    Python
    users_ref = db.collection("users")
    docs = users_ref.stream()
    
    for doc in docs:
        print(f"{doc.id} => {doc.to_dict()}")

    Python

    users_ref = db.collection("users")
    docs = users_ref.stream()
    
    async for doc in docs:
        print(f"{doc.id} => {doc.to_dict()}")
    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;
      }
    });
    Node.js
    const snapshot = await db.collection('users').get();
    snapshot.forEach((doc) => {
      console.log(doc.id, '=>', doc.data());
    });
    Vai
    iter := client.Collection("users").Documents(ctx)
    for {
    	doc, err := iter.Next()
    	if err == iterator.Done {
    		break
    	}
    	if err != nil {
    		log.Fatalf("Failed to iterate: %v", err)
    	}
    	fmt.Println(doc.Data())
    }
    PHP

    PHP

    Per saperne di più sull'installazione e sulla creazione di un client Cloud Firestore, consulta Librerie client Cloud Firestore.

    $usersRef = $db->collection('samples/php/users');
    $snapshot = $usersRef->documents();
    foreach ($snapshot as $user) {
        printf('User: %s' . PHP_EOL, $user->id());
        printf('First: %s' . PHP_EOL, $user['first']);
        if (!empty($user['middle'])) {
            printf('Middle: %s' . PHP_EOL, $user['middle']);
        }
        printf('Last: %s' . PHP_EOL, $user['last']);
        printf('Born: %d' . PHP_EOL, $user['born']);
        printf(PHP_EOL);
    }
    printf('Retrieved and printed out all documents from the users collection.' . PHP_EOL);
    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.");
    });
    C#
    CollectionReference usersRef = db.Collection("users");
    QuerySnapshot snapshot = await usersRef.GetSnapshotAsync();
    foreach (DocumentSnapshot document in snapshot.Documents)
    {
        Console.WriteLine("User: {0}", document.Id);
        Dictionary<string, object> documentDictionary = document.ToDictionary();
        Console.WriteLine("First: {0}", documentDictionary["First"]);
        if (documentDictionary.ContainsKey("Middle"))
        {
            Console.WriteLine("Middle: {0}", documentDictionary["Middle"]);
        }
        Console.WriteLine("Last: {0}", documentDictionary["Last"]);
        Console.WriteLine("Born: {0}", documentDictionary["Born"]);
        Console.WriteLine();
    }
    Ruby
    users_ref = firestore.col collection_path
    users_ref.get do |user|
      puts "#{user.document_id} data: #{user.data}."
    end

    Proteggi i tuoi dati

    Se utilizzi l'SDK per il web, le piattaforme Android o Apple, usa Firebase Autenticazione e Cloud Firestore Security Rules per proteggere i tuoi dati in Cloud Firestore,

    Di seguito sono riportate alcune serie di regole di base che è possibile utilizzare per iniziare. Puoi modificare sulle regole di sicurezza nella sezione Regole di la console.

    Autenticazione richiesta

    // 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 blocco

    // 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 eseguire il deployment dell'app web, Android o iOS in produzione, adotta anche misure per assicurarti che solo i client dell'app possano accedere ai tuoi dati Cloud Firestore. Consulta la documentazione di App Check.

    Se usi uno degli SDK del server, usa Identity and Access Management (IAM) per proteggere i tuoi dati a Cloud Firestore.

    Guarda un tutorial video

    Per indicazioni dettagliate su come iniziare a utilizzare le librerie client mobile di Cloud Firestore, guarda uno dei seguenti tutorial video:

    Web
    iOS+
    Android

    Puoi trovare altri video in Firebase Canale YouTube.

    Passaggi successivi

    Approfondisci le tue conoscenze con i seguenti argomenti: