Check out what’s new from Firebase at Google I/O 2022. Learn more

Inizia con Cloud Firestore

Questa guida introduttiva mostra come configurare Cloud Firestore, aggiungere dati, quindi visualizzare i dati appena aggiunti nella console Firebase.

Crea un database Cloud Firestore

  1. Se non lo hai già fatto, crea un progetto Firebase: nella console Firebase , fai clic su Aggiungi progetto , quindi segui le istruzioni sullo schermo per creare un progetto Firebase o per aggiungere servizi Firebase a un progetto GCP esistente.

  2. Passa alla sezione Cloud Firestore della console Firebase . Ti verrà chiesto di selezionare un progetto Firebase esistente. Segui il flusso di lavoro di creazione del database.

  3. Seleziona una modalità di partenza per le regole di sicurezza di Cloud Firestore:

    Modalità di prova

    Buono per iniziare con le librerie client mobili e Web, ma consente a chiunque di leggere e sovrascrivere i tuoi dati. Dopo il test, assicurati di rivedere la sezione Proteggi i tuoi dati .

    Per iniziare con il Web, le piattaforme Apple o l'SDK Android, seleziona la modalità test.

    Modalità bloccata

    Nega tutte le letture e le scritture da client mobili e Web. I tuoi server delle applicazioni autenticati (C#, Go, Java, Node.js, PHP, Python o Ruby) possono ancora accedere al tuo database.

    Per iniziare con la libreria client del server C#, Go, Java, Node.js, PHP, Python o Ruby, seleziona la modalità bloccata.

  4. Seleziona una posizione per il tuo database.

    • Questa impostazione della posizione è la posizione della risorsa Google Cloud Platform (GCP) predefinita del tuo progetto . Tieni presente che questa posizione verrà utilizzata per i servizi GCP nel tuo progetto che richiedono un'impostazione della posizione, in particolare il bucket di archiviazione cloud predefinito e l' app App Engine (richiesto se utilizzi Cloud Scheduler).

    • Se non sei in grado di selezionare una posizione, il tuo progetto ha già una posizione di risorsa GCP predefinita. È stato impostato durante la creazione del progetto o durante l'impostazione di un altro servizio che richiede un'impostazione della posizione.

  5. Fare clic su Fine .

Quando abiliti Cloud Firestore, abilita anche l'API in Cloud API Manager .

Configura il tuo ambiente di sviluppo

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

Web version 8

  1. Segui le istruzioni per aggiungere Firebase alla tua app Web .
  2. Aggiungi le librerie Firebase e Cloud Firestore alla tua app:
    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/8.10.1/firebase-firestore.js"></script>
    L'SDK di Cloud Firestore è disponibile anche come pacchetto npm.
    npm install firebase@8.10.1 --save
    
    Dovrai richiedere manualmente sia Firebase che Cloud Firestore.
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/firestore");
    

Web version 9

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

Segui le istruzioni per aggiungere 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 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 le tue dipendenze in background.

Java

  1. Segui le istruzioni per aggiungere Firebase alla tua app Android .
  2. Utilizzando la BoM Android di Firebase, dichiara la dipendenza per la libreria Android di Cloud Firestore nel file Gradle del modulo (a livello di app) (solitamente app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.1.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 la BoM Android di Firebase, la tua app utilizzerà sempre versioni compatibili delle librerie Android di Firebase.

    (Alternativa) Dichiara le dipendenze della libreria Firebase senza utilizzare la distinta base

    Se scegli di non utilizzare la distinta base di Firebase, devi specificare ciascuna versione della libreria Firebase nella relativa riga di dipendenza.

    Tieni presente che se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare la distinta base per gestire le versioni delle librerie, il che garantisce 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:24.1.2'
    }
    

Kotlin+KTX

  1. Segui le istruzioni per aggiungere Firebase alla tua app Android .
  2. Utilizzando la BoM Android di Firebase, dichiara la dipendenza per la libreria Android di Cloud Firestore nel file Gradle del modulo (a livello di app) (solitamente app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.1.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-ktx'
    }
    

    Utilizzando la BoM Android di Firebase, la tua app utilizzerà sempre versioni compatibili delle librerie Android di Firebase.

    (Alternativa) Dichiara le dipendenze della libreria Firebase senza utilizzare la distinta base

    Se scegli di non utilizzare la distinta base di Firebase, devi specificare ciascuna versione della libreria Firebase nella relativa riga di dipendenza.

    Tieni presente che se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare la distinta base per gestire le versioni delle librerie, il che garantisce 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-ktx:24.1.2'
    }
    

Dart

  1. Se non l'hai già fatto, configura e inizializza Firebase nella tua app Flutter.
  2. Dalla radice del tuo progetto Flutter, esegui il seguente comando per installare il plug-in:
    flutter pub add cloud_firestore
  3. Una volta completato, ricostruisci l'applicazione Flutter:
    flutter run
Giava
  1. Aggiungi Firebase Admin SDK alla tua app:
    • Utilizzando Gradle:
      compile 'com.google.firebase:firebase-admin:8.1.0'
      
    • Utilizzando Maven:
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>8.1.0</version>
      </dependency>
           
  2. Segui le istruzioni seguenti per inizializzare Cloud Firestore con le credenziali appropriate nel tuo ambiente.
Pitone
  1. Aggiungi Firebase Admin SDK alla tua app Python:
    pip install --upgrade firebase-admin
  2. Segui le istruzioni seguenti per inizializzare Cloud Firestore con le credenziali appropriate nel tuo ambiente.
C++
  1. Segui le istruzioni per aggiungere Firebase al tuo progetto C++ .
  2. Interfaccia C++ per Android.
    • Dipendenze di grado. Aggiungi quanto segue al file Gradle del tuo modulo (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. Allo stesso modo, il modo consigliato per ottenere le dipendenze binarie è aggiungere quanto segue al file 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. Per configurare l' integrazione desktop , vedere Aggiungere Firebase al progetto C++ .
Unità
  1. Segui le istruzioni per aggiungere Firebase al tuo progetto Unity .
  2. Interfaccia Unity per Android.
  3. Quando crei per Android, abilita ProGuarding per evitare il limite DEX di Android. Per farlo, nell'editor di Unity:

    1. Seleziona File > Impostazioni build
    2. Passa da "Piattaforma" ad "Android" e fai clic su "Cambia piattaforma"
    3. Fai clic su "Impostazioni giocatore..."
    4. Nell'interfaccia utente principale di Unity, in "Impostazioni per Android", seleziona "Impostazioni di pubblicazione"
    5. Nella sezione "Riduci", modifica le impostazioni di rilascio e debug da "Nessuno" a "ProGuard"
Node.js
  1. Aggiungi Firebase Admin SDK alla tua app:
    npm install firebase-admin --save
  2. Segui le istruzioni seguenti per inizializzare Cloud Firestore con le credenziali appropriate nel tuo ambiente.
andare
  1. Aggiungi Firebase Admin SDK alla tua app Go:
    go get firebase.google.com/go
    
  2. Segui le istruzioni seguenti 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 le credenziali predefinite dell'applicazione Google per l'autenticazione.
    • Per eseguire l'autenticazione dal tuo ambiente di sviluppo, imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS in modo che punti a un file di chiavi dell'account di servizio JSON. È possibile creare un file chiave nella pagina Credenziali della console API .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Nel tuo ambiente di produzione, non devi autenticarti se esegui la tua applicazione su App Engine o Compute Engine, utilizzando lo stesso progetto che usi per Cloud Firestore. In caso contrario, configura un account di servizio .
  2. Installa e abilita l' estensione gRPC per PHP, di cui avrai bisogno per utilizzare la libreria client.
  3. Aggiungi la libreria PHP di Cloud Firestore alla tua app:
    composer require google/cloud-firestore
C#
  1. Le librerie client del 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 dal tuo ambiente di sviluppo, imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS in modo che punti a un file di chiavi dell'account di servizio JSON. È possibile creare un file chiave nella pagina Credenziali della console API .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Nel tuo ambiente di produzione, non devi autenticarti se esegui la tua applicazione su App Engine o Compute Engine, utilizzando lo stesso progetto che usi per Cloud Firestore. In caso contrario, configura 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;
Rubino
  1. Le librerie client del 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 dal tuo ambiente di sviluppo, imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS in modo che punti a un file di chiavi dell'account di servizio JSON. È possibile creare un file chiave nella pagina Credenziali della console API .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Nel tuo ambiente di produzione, non devi autenticarti se esegui la tua applicazione su App Engine o Compute Engine, utilizzando lo stesso progetto che usi per Cloud Firestore. In caso contrario, configura un account di servizio .
  2. Aggiungi la libreria Cloud Firestore Ruby alla tua app nel tuo Gemfile :
    gem "google-cloud-firestore"
  3. Installa le dipendenze dal tuo Gemfile usando:
    bundle install

(Facoltativo) Prototipazione e test con Firebase Local Emulator Suite

Per gli sviluppatori mobili, prima di parlare di come la tua app scrive e legge da Cloud Firestore, introduciamo una serie 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, ottimizzando le tue regole di sicurezza o lavorando per trovare il modo più conveniente per interagire con il back-end, essere in grado di lavorare localmente senza distribuire servizi live può essere un'ottima idea.

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

L'utilizzo dell'emulatore Cloud Firestore prevede solo pochi passaggi:

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

È disponibile una procedura dettagliata su Cloud Firestore e Cloud Functions . Dovresti anche dare un'occhiata all'introduzione di Local Emulator Suite .

Inizializza Cloud Firestore

Inizializza un'istanza di Cloud Firestore:

Web version 9

import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";

// TODO: Replace the following with your app's Firebase project configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
    // ...
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);


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

I valori per `initializeApp` possono essere trovati in `firebaseConfig` della tua app web. Per rendere persistenti i dati quando il dispositivo perde la connessione, vedere la documentazione Abilita dati offline .

Web version 8

import firebase from "firebase/app";
import "firebase/firestore";

// TODO: Replace the following with your app's Firebase project configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
    // ...
};

// Initialize Firebase
firebase.initializeApp(firebaseConfig);


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

I valori per `initializeApp` possono essere trovati in `firebaseConfig` della tua app web. Per rendere persistenti i dati quando il dispositivo perde la connessione, vedere la documentazione Abilita dati offline .
Veloce
Nota: questo prodotto non è disponibile sui target watchOS e App Clip.
import FirebaseCore
import FirebaseFirestore
FirebaseApp.configure()

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

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

Java

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

Kotlin+KTX

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

Dart

db = FirebaseFirestore.instance;
Giava
L'SDK di Cloud Firestore viene inizializzato in modi diversi a seconda dell'ambiente. Di seguito sono riportati i metodi più comuni. Per un riferimento completo, consulta Inizializzare l'SDK di amministrazione .
  • Inizializza su Google Cloud Platform
    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();
    
  • Inizializza sul tuo server

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

    Vai a IAM e amministrazione > Account di servizio nella console di Cloud Platform. Genera una nuova chiave privata e salva il file JSON. Quindi utilizzare 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();
    
  • Pitone
    L'SDK di Cloud Firestore viene inizializzato in modi diversi a seconda dell'ambiente. Di seguito sono riportati i metodi più comuni. Per un riferimento completo, consulta Inizializzare l'SDK di amministrazione .
  • Inizializza su Google Cloud Platform
    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, {
      'projectId': project_id,
    })
    
    db = firestore.client()
    
  • Inizializza sul tuo server

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

    Vai a IAM e amministrazione > Account di servizio nella console di Cloud Platform. Genera una nuova chiave privata e salva il file JSON. Quindi utilizzare 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')
    firebase_admin.initialize_app(cred)
    
    db = firestore.client()
    
  • Python

    L'SDK di Cloud Firestore viene inizializzato in modi diversi a seconda dell'ambiente. Di seguito sono riportati i metodi più comuni. Per un riferimento completo, consulta Inizializzare l'SDK di amministrazione .
  • Inizializza su Google Cloud Platform
    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, {
      'projectId': project_id,
    })
    
    db = firestore.AsyncClient()
    
  • Inizializza sul tuo server

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

    Vai a IAM e amministrazione > Account di servizio nella console di Cloud Platform. Genera una nuova chiave privata e salva il file JSON. Quindi utilizzare 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')
    firebase_admin.initialize_app(cred)
    
    db = firestore.AsyncClient()
    
  • 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 di Cloud Firestore viene inizializzato in modi diversi a seconda dell'ambiente. Di seguito sono riportati i metodi più comuni. Per un riferimento completo, consulta Inizializzare l'SDK di amministrazione .
    • Inizializza su Cloud Functions
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue } = require('firebase-admin/firestore');
      initializeApp();
      
      const db = getFirestore();
      
    • Inizializza su Google Cloud Platform
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue } = require('firebase-admin/firestore');
      initializeApp({
        credential: applicationDefault()
      });
      
      const db = getFirestore();
    • Inizializza sul tuo server

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

      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue } = require('firebase-admin/firestore');
      const serviceAccount = require('./path/to/serviceAccountKey.json');
      
      initializeApp({
        credential: cert(serviceAccount)
      });
      
      const db = getFirestore();
      
    andare
    L'SDK di Cloud Firestore viene inizializzato in modi diversi a seconda dell'ambiente. Di seguito sono riportati i metodi più comuni. Per un riferimento completo, consulta Inizializzare l'SDK di amministrazione .
  • Inizializza su Google Cloud Platform
    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 Firebase Admin SDK sul tuo server, utilizza un account di servizio .

    Vai a IAM e amministrazione > Account di servizio nella console di Cloud Platform. Genera una nuova chiave privata e salva il file JSON. Quindi utilizzare 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
    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);
        }
    }
    Unità
    using Firebase.Firestore;
    using Firebase.Extensions;
    FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
    C#
    FirestoreDb db = FirestoreDb.Create(project);
    Console.WriteLine("Created Cloud Firestore client with project ID: {0}", project);
    Rubino
    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 in Raccolte. Cloud Firestore crea raccolte e documenti in modo implicito la prima volta che aggiungi dati al documento. Non è necessario creare raccolte o documenti in modo esplicito.

    Crea una nuova raccolta e un documento usando il codice di esempio seguente.

    Web version 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);
    }

    Web version 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);
    });
    Veloce
    Nota: questo prodotto non è disponibile sui target watchOS e 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)")
        }
    }
    Obiettivo-C
    Nota: questo prodotto non è disponibile sui target watchOS e 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

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

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

    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}'));
    Giava
    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());
    Pitone
    doc_ref = db.collection(u'users').document(u'alovelace')
    doc_ref.set({
        u'first': u'Ada',
        u'last': u'Lovelace',
        u'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
    });
    andare
    _, _, 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
    $docRef = $db->collection('samples/php/users')->document('lovelace');
    $docRef->set([
        'first' => 'Ada',
        'last' => 'Lovelace',
        'born' => 1815
    ]);
    printf('Added data to the lovelace document in the users collection.' . PHP_EOL);
    Unità
    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);
    Rubino
    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 degli users . Si noti che questo documento include una coppia chiave-valore (secondo nome) che non compare nel primo documento. I documenti in una raccolta possono contenere diversi insiemi di informazioni.

    Web version 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);
    }

    Web version 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);
    });
    Veloce
    Nota: questo prodotto non è disponibile sui target watchOS e 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)")
        }
    }
    Obiettivo-C
    Nota: questo prodotto non è disponibile sui target watchOS e 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

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

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

    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}'));
    Giava
    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());
    Pitone
    doc_ref = db.collection(u'users').document(u'aturing')
    doc_ref.set({
        u'first': u'Alan',
        u'middle': u'Mathison',
        u'last': u'Turing',
        u'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
    });
    andare
    _, _, 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
    $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);
    Unità
    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);
    Rubino
    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."

    Leggi i dati

    Per verificare rapidamente di aver aggiunto dati a Cloud Firestore, utilizza il visualizzatore di dati nella console Firebase .

    Puoi anche usare il metodo "get" per recuperare l'intera collezione.

    Web version 9

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

    Web version 8

    db.collection("users").get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
            console.log(`${doc.id} => ${doc.data()}`);
        });
    });
    Veloce
    Nota: questo prodotto non è disponibile sui target watchOS e 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())")
            }
        }
    }
    Obiettivo-C
    Nota: questo prodotto non è disponibile sui target watchOS e 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

    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

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

    Dart

    await db.collection("users").get().then((event) {
      for (var doc in event.docs) {
        print("${doc.id} => ${doc.data()}");
      }
    });
    Giava
    // 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"));
    }
    Pitone
    users_ref = db.collection(u'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());
    });
    andare
    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
    $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);
    Unità
    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();
    }
    Rubino
    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 delle piattaforme Web, Android o Apple, utilizza l' autenticazione Firebase e le regole di sicurezza di Cloud Firestore per proteggere i tuoi dati in Cloud Firestore.

    Ecco alcuni set di regole di base che puoi utilizzare per iniziare. Puoi modificare le tue regole di sicurezza nella scheda Regole della console.

    Autenticazione richiesta

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

    Modalità bloccata

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

    Modalità di prova

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

    Prima di distribuire la tua app Web, Android o iOS alla produzione, prendi anche le misure per assicurarti che solo i client dell'app possano accedere ai dati di Cloud Firestore. Consulta la documentazione di App Check .

    Se stai utilizzando uno degli SDK del server, utilizza Identity and Access Management (IAM) per proteggere i tuoi dati in Cloud Firestore.

    Guarda un video tutorial

    Per una guida dettagliata su come iniziare con le librerie dei client mobili di Cloud Firestore, guarda uno dei seguenti tutorial video:

    ragnatela
    iOS+
    Androide

    Puoi trovare altri video nel canale YouTube di Firebase.

    Prossimi passi

    Approfondisci le tue conoscenze con i seguenti argomenti:

    • Codelabs : impara a utilizzare Cloud Firestore in un'app reale seguendo il codelab per Android , iOS o Web .
    • Modello di dati : scopri di più su come sono strutturati i dati in Cloud Firestore, inclusi i dati gerarchici e le sottoraccolte.
    • Aggiungi dati : scopri di più sulla creazione e l'aggiornamento dei dati in Cloud Firestore.
    • Ottieni dati : scopri di più su come recuperare i dati.
    • Esegui query semplici e composte : scopri come eseguire query semplici e composte.
    • Ordina e limita le query Scopri come ordinare e limitare i dati restituiti dalle tue query.