Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.
Guida rapida: crea un database Firestore utilizzando una libreria client web o per dispositivi mobili

Creare un database Firestore utilizzando una libreria client web o per dispositivi mobili

Questa guida rapida mostra come configurare Firestore, aggiungere dati e leggere dati utilizzando la libreria client Android, Apple Platform, Web, Unity o C++.

Crea un database Firestore

  1. Se non l'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 aggiungere servizi Firebase a un progetto GCP esistente.

  2. Nel riquadro di navigazione della console Firebase, seleziona Firestore, quindi fai clic su Crea database per Firestore.

  3. Seleziona Modalità di test per le regole di sicurezza Firestore:

    Modalità di prova
    Ideale per iniziare a utilizzare le librerie client per dispositivi mobili e web, ma consente a chiunque di leggere e sovrascrivere i tuoi dati. Dopo il test, assicurati di controllare la sezione Proteggi i tuoi dati.
  4. Seleziona una località per il tuo database.

    • Questa impostazione della località corrisponde alla località predefinita delle risorse di Google Cloud Platform (GCP) del progetto. Tieni presente che questa località verrà utilizzata per i servizi GCP nel tuo progetto che richiedono un'impostazione di località, in particolare il bucket predefinito di Cloud Storage e l'app App Engine (questa operazione è necessaria se utilizzi Cloud Scheduler).

    • Se non puoi selezionare una località, il progetto dispone già di una località della risorsa GCP predefinita. È stato configurato durante la creazione del progetto o durante la configurazione di un altro servizio che richiede l'impostazione di una località.

  5. Fai clic su Fine.

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

Configurazione dell'ambiente di sviluppo

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

Versione 9 web

  1. Segui le istruzioni per aggiungere Firebase alla tua app web.
  2. Importa sia Firebase che Firestore:
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
    

Versione 8 web

  1. Segui le istruzioni per aggiungere Firebase alla tua app web.
  2. Aggiungi le librerie Firebase e 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 Firestore è disponibile anche come pacchetto npm.
    npm install firebase@8.10.1 --save
    
    Dovrai richiedere manualmente sia Firebase che Firestore.
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/firestore");
    
Piattaforme Apple

Segui le istruzioni per aggiungere Firebase alla tua app Apple.

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

  1. In Xcode, con il progetto dell'app aperto, vai a File > Swift Packages > Add Package Dependency (File > Pacchetti Swift > Aggiungi dipendenza pacchetto).
  2. Quando richiesto, aggiungi il repository dell'SDK delle piattaforme Apple di Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Scegli la libreria Firestore.
  5. Al termine, Xcode inizierà automaticamente a risolvere e a scaricare le tue dipendenze in background.
Kotlin+KTX
Android
  1. Segui le istruzioni per aggiungere Firebase alla tua app Android.
  2. Dichiara la dipendenza per la libreria Android di Firestore nel file Gradle del tuo modulo (a livello di app) (di solito app/build.gradle):
    implementation 'com.google.firebase:firebase-firestore-ktx:24.4.4'

    Se la tua app utilizza più librerie Firebase, valuta la possibilità di utilizzare Bom Android Firebase, che garantisce che le versioni della libreria Firebase siano sempre compatibili.

Java
Android
  1. Segui le istruzioni per aggiungere Firebase alla tua app Android.
  2. Dichiara la dipendenza per la libreria Android di Firestore nel file Gradle del tuo modulo (a livello di app) (di solito app/build.gradle):
    implementation 'com.google.firebase:firebase-firestore:24.4.4'

    Se la tua app utilizza più librerie Firebase, valuta la possibilità di utilizzare Bom Android Firebase, che garantisce che le versioni della libreria Firebase siano sempre compatibili.

Freccetto

  1. Se non lo hai già fatto, configura e inizializza Firebase nella tua app Flutter.
  2. Dalla radice del progetto Flutter, esegui il comando seguente per installare il plug-in:
    flutter pub add cloud_firestore
  3. Al termine, ricrea la tua applicazione Flutter:
    flutter run
C++
  1. Segui le istruzioni per aggiungere Firebase al tuo progetto C++.
  2. Interfaccia C++ per Android.
    • Dipendenze Gradle. Aggiungi quanto segue al tuo file Gradle del tuo modulo (a livello di app), in genere 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 ottenere le dipendenze binarie è l'aggiunta seguente 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, consulta l'articolo 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 Unity:

    1. Seleziona File > Impostazioni build
    2. Imposta "Piattaforma" su "Android" e fai clic su "Cambia piattaforma"
    3. Fai clic su "Impostazioni player...".
    4. Nella UI di Unity principale, in "Impostazioni per Android", seleziona "Impostazioni di pubblicazione"
    5. Nella sezione "Minify", cambia le impostazioni di release e di debug da "Nessuno" a "ProGuard"

Inizializza Firestore

Inizializza un'istanza di Firestore:

Versione 9 web

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

const db = getFirestore();
I valori per "inizializzazione app" si trovano nella sezione "firebaseConfig" della tua app web. Per conservare i dati quando il dispositivo perde la connessione, consulta la documentazione relativa all'attivazione dei dati offline.

Versione 8 web

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

var db = firebase.firestore();
I valori per "inizializzazione app" si trovano nella sezione "firebaseConfig" della tua app web. Per conservare i dati quando il dispositivo perde la connessione, consulta la documentazione relativa all'attivazione dei dati offline.
Swift
Nota:questo prodotto non è disponibile per i target watchOS e app clip.
import FirebaseCore
import FirebaseFirestore

FirebaseApp.configure()

let db = Firestore.firestore()
Objective-C
Nota:questo prodotto non è disponibile per i target watchOS e app clip.
@import FirebaseCore;
@import FirebaseFirestore;

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

FIRFirestore *defaultFirestore = [FIRFirestore firestore];
  
Kotlin+KTX
Android
  // Access a Firestore instance from your Activity
  val db = Firebase.firestore
Java
Android
// Access a Firestore instance from your Activity
  FirebaseFirestore db = FirebaseFirestore.getInstance();

Freccetto

db = FirebaseFirestore.instance;
C++
// Make sure the call to `Create()` happens some time before you call Firestore::GetInstance().
App::Create();
Firestore* db = Firestore::GetInstance();
Unità
using Firebase.Firestore;
using Firebase.Extensions;
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;

Aggiungi dati

Firestore archivia i dati in Documenti, che sono archiviati in Raccolte. Firestore crea raccolte e documenti in modo implicito la prima volta che aggiungi dati al documento. Non devi creare esplicitamente raccolte o documenti.

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

Versione 9 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);
}

Versione 8 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 per i 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)")
    }
}
Objective-C
Nota:questo prodotto non è disponibile per i 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);
      }
    }];
Kotlin+KTX
Android
// Create a new user with a first and last name
val user = hashMapOf(
        "first" to "Ada",
        "last" to "Lovelace",
        "born" to 1815
)

// Add a new document with a generated ID
db.collection("users")
    .add(user)
    .addOnSuccessListener { documentReference ->
        Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}")
    }
    .addOnFailureListener { e ->
        Log.w(TAG, "Error adding document", e)
    }
Java
Android
// Create a new user with a first and last name
Map<String, Object> user = new HashMap<>();
user.put("first", "Ada");
user.put("last", "Lovelace");
user.put("born", 1815);

// Add a new document with a generated ID
db.collection("users")
        .add(user)
        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
                Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Error adding document", e);
            }
        });

Freccetto

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

Ora aggiungi un altro documento alla raccolta users. Tieni presente che questo documento include una coppia chiave-valore (nome intermedio) che non viene visualizzata nel primo documento. I documenti di una raccolta possono contenere insiemi di informazioni diversi.

Versione 9 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);
}

Versione 8 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 per i 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)")
    }
}
Objective-C
Nota:questo prodotto non è disponibile per i 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);
      }
    }];
Kotlin+KTX
Android
// Create a new user with a first, middle, and last name
val user = hashMapOf(
        "first" to "Alan",
        "middle" to "Mathison",
        "last" to "Turing",
        "born" to 1912
)

// Add a new document with a generated ID
db.collection("users")
    .add(user)
    .addOnSuccessListener { documentReference ->
        Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}")
    }
    .addOnFailureListener { e ->
        Log.w(TAG, "Error adding document", e)
    }
Java
Android
// Create a new user with a first, middle, and last name
Map<String, Object> user = new HashMap<>();
user.put("first", "Alan");
user.put("middle", "Mathison");
user.put("last", "Turing");
user.put("born", 1912);

// Add a new document with a generated ID
db.collection("users")
        .add(user)
        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
                Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId());
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Error adding document", e);
            }
        });

Freccetto

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

Lettura di dati

Utilizza il visualizzatore dati nella console Firebase per verificare rapidamente di aver aggiunto dati a Firestore.

Puoi anche utilizzare il metodo get per recuperare l'intera raccolta.

Versione 9 web

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

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

Versione 8 web

db.collection("users").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} => ${doc.data()}`);
    });
});
Swift
Nota:questo prodotto non è disponibile per i 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())")
        }
    }
}
Objective-C
Nota:questo prodotto non è disponibile per i 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);
        }
      }
    }];
Kotlin+KTX
Android
db.collection("users")
        .get()
        .addOnSuccessListener { result ->
            for (document in result) {
                Log.d(TAG, "${document.id} => ${document.data}")
            }
        }
        .addOnFailureListener { exception ->
            Log.w(TAG, "Error getting documents.", exception)
        }
Java
Android
db.collection("users")
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        Log.d(TAG, document.getId() + " => " + document.getData());
                    }
                } else {
                    Log.w(TAG, "Error getting documents.", task.getException());
                }
            }
        });

Freccetto

await db.collection("users").get().then((event) {
  for (var doc in event.docs) {
    print("${doc.id} => ${doc.data()}");
  }
});
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;
  }
});
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.");
});

Proteggi i tuoi dati

Utilizza Firebase Authentication e le regole di sicurezza di Firestore per proteggere i tuoi dati in Firestore.

Di seguito sono riportate alcune serie di regole di base che puoi utilizzare per iniziare. Puoi modificare le regole di sicurezza nella scheda Regole della Console Firebase.

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

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

Guarda un tutorial video

Per indicazioni dettagliate su come iniziare a utilizzare le librerie client per dispositivi mobili e web di Firestore, guarda uno dei seguenti tutorial video:

Web
iOS
Android

Puoi trovare altri video nel canale YouTube di Firebase.

Passaggi successivi

Approfondisci le tue conoscenze con i seguenti argomenti: