Panduan memulai ini menunjukkan cara menyiapkan edisi Cloud Firestore Enterprise, menambahkan data, lalu menggunakan operasi Core atau operasi Pipeline untuk mengkueri data yang baru saja ditambahkan di Firebase console.
Cloud Firestore mendukung SDK seluler atau web dan library klien server:
Cloud Firestore mendukung SDK untuk Android, iOS, dan web serta lainnya. Bersama Cloud Firestore Security Rules dan Firebase Authentication, SDK seluler dan web mendukung arsitektur aplikasi serverless tempat klien terhubung langsung ke database Cloud Firestore Anda.
Cloud Firestore mendukung library klien server untuk Java, Node.js, dan Python. Gunakan library klien ini untuk menyiapkan lingkungan server dengan hak istimewa yang memiliki akses penuh ke database Anda. Pelajari lebih lanjut library ini di Panduan memulai untuk library klien server.
Membuat database edisi Cloud Firestore Enterprise
Jika belum melakukannya, buat project Firebase: Di Firebase console, klik Add project, lalu ikuti petunjuk di layar untuk membuat project Firebase atau untuk menambahkan layanan Firebase ke project Google Cloud yang ada.
Buka project Anda di Firebase console. Di panel kiri, luaskan Build, lalu pilih Firestore database.
Klik Create database.
Pilih Enterprise untuk mode database.
Pilih Firestore in Native Mode untuk mode operasi, yang mendukung operasi Core dan Pipeline.
Pilih lokasi untuk database Anda.
Pilih mode awal untuk Cloud Firestore Security Rules Anda:
- Mode pengujian
Cocok untuk memulai dengan library klien seluler dan web, tetapi memungkinkan siapa pun untuk membaca dan menimpa data Anda. Setelah melakukan pengujian, pastikan untuk membaca bagian Melindungi data.
Untuk memulai dengan web, platform Apple, atau Android SDK, pilih mode pengujian.
- Mode produksi
Menolak semua pembacaan dan penulisan dari klien seluler dan web. Server aplikasi terautentikasi (Python) masih dapat mengakses database Anda.
Kumpulan Cloud Firestore Security Rules awal Anda akan diterapkan ke database Cloud Firestore default. Jika Anda membuat beberapa database untuk project, Anda dapat men-deploy Cloud Firestore Security Rules untuk setiap database.
Klik Buat.
Saat edisi Cloud Firestore Enterprise diaktifkan, API di Pengelola Cloud API juga akan aktif.
Menyiapkan lingkungan pengembangan
Tambahkan dependensi dan library klien yang dibutuhkan ke aplikasi Anda.
Web
- Ikuti petunjuk untuk menambahkan Firebase ke aplikasi web Anda.
-
Cloud Firestore SDK tersedia sebagai paket npm.
Anda harus mengimpor Firebase dan Cloud Firestore.npm install firebase@12.8.0 --save
import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore";
iOS+
Ikuti petunjuk untuk menambahkan Firebase ke aplikasi Apple Anda.
Gunakan Swift Package Manager untuk menginstal dan mengelola dependensi Firebase.
- Di Xcode, dengan project aplikasi Anda dalam keadaan terbuka, buka File > Swift Packages > Add Package Dependency.
- Saat diminta, tambahkan repositori SDK platform Apple Firebase:
- Pilih library Firestore.
- Setelah selesai, Xcode akan otomatis mulai me-resolve dan mendownload dependensi Anda di latar belakang.
https://github.com/firebase/firebase-ios-sdk
Android
- Ikuti petunjuk untuk menambahkan Firebase ke aplikasi Android Anda.
- Dengan menggunakan
Firebase Android BoM,
deklarasikan dependensi untuk library Cloud Firestore untuk Android di
file Gradle modul (level aplikasi)
(biasanya
app/build.gradle.ktsatauapp/build.gradle).dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.7.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") }
Dengan Firebase Android BoM, aplikasi Anda akan selalu menggunakan versi library Android Firebase yang kompatibel.
(Alternatif) Deklarasikan dependensi library Firebase tanpa menggunakan BoM
Jika memilih untuk tidak menggunakan Firebase BoM, Anda harus menentukan setiap versi library Firebase di baris dependensinya.
Perlu diperhatikan bahwa jika Anda menggunakan beberapa library Firebase di aplikasi, sebaiknya gunakan BoM untuk mengelola versi library, yang memastikan bahwa semua versi kompatibel.
dependencies { // Declare the dependency for the Cloud Firestore library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-firestore:26.0.2") }
Mencari modul library khusus Kotlin? Mulai rilis Oktober 2023, developer Kotlin dan Java dapat bergantung pada modul library utama (untuk mengetahui detailnya, lihat FAQ tentang inisiatif ini).
Lakukan inisialisasi Cloud Firestore
Lakukan inisialisasi instance Cloud Firestore:
Web
import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore"; // TODO: Replace the following with your app's Firebase project configuration // See: https://support.google.com/firebase/answer/7015592 const firebaseConfig = { FIREBASE_CONFIGURATION }; // Initialize Firebase const app = initializeApp(firebaseConfig); // When initializing Firestore, remember to use the name of the database you created earlier: const db = initializeFirestore(app, {}, 'your-new-enterprise-database');
Ganti FIREBASE_CONFIGURATION dengan firebaseConfig aplikasi web Anda.
Untuk mempertahankan data saat perangkat kehilangan koneksi, lihat dokumentasi Mengaktifkan Data Offline.
Swift
import FirebaseCore import FirebaseFirestore FirebaseApp.configure() // When initializing Firestore, remember to use the name of the database you created earlier: let db = Firestore.firestore(database: "your-new-enterprise-database")
Kotlin
// Access a Cloud Firestore instance from your Activity // When initializing Firestore, remember to use the name of the database you created earlier: val firestore = FirebaseFirestore.getInstance("your-new-enterprise-database")
Java
// Access a Cloud Firestore instance from your Activity // When initializing Firestore, remember to use the name of the database you created earlier: FirebaseFirestore firestore = FirebaseFirestore.getInstance("your-new-enterprise-database");
Menambahkan data menggunakan operasi Core
Guna mempelajari operasi Core dan operasi Pipeline untuk mengkueri data, tambahkan data ke database Anda menggunakan operasi Core.
Cloud Firestore menyimpan data dalam Documents yang disimpan di Collections. Cloud Firestore membuat koleksi dan dokumen secara implisit saat pertama kali Anda menambahkan data ke dokumen. Anda tidak perlu membuat koleksi atau dokumen secara eksplisit.
Buat koleksi baru dan dokumen menggunakan kode contoh berikut.
Web
import { collection, addDoc } from "firebase/firestore"; try { const docRef = await addDoc(collection(db, "users"), { first: "Ada", last: "Lovelace", born: 1815 }); console.log("Document written with ID: ", docRef.id); } catch (e) { console.error("Error adding document: ", e); }
Web
db.collection("users").add({ first: "Ada", last: "Lovelace", born: 1815 }) .then((docRef) => { console.log("Document written with ID: ", docRef.id); }) .catch((error) => { console.error("Error adding document: ", error); });
Swift
// Add a new document with a generated ID do { let ref = try await db.collection("users").addDocument(data: [ "first": "Ada", "last": "Lovelace", "born": 1815 ]) print("Document added with ID: \(ref.documentID)") } catch { print("Error adding document: \(error)") }
Kotlin
// Create a new user with a first and last name val user = hashMapOf( "first" to "Ada", "last" to "Lovelace", "born" to 1815, ) // Add a new document with a generated ID db.collection("users") .add(user) .addOnSuccessListener { documentReference -> Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}") } .addOnFailureListener { e -> Log.w(TAG, "Error adding document", e) }
Java
// Create a new user with a first and last name Map<String, Object> user = new HashMap<>(); user.put("first", "Ada"); user.put("last", "Lovelace"); user.put("born", 1815); // Add a new document with a generated ID db.collection("users") .add(user) .addOnSuccessListener(new OnSuccessListener<DocumentReference>() { @Override public void onSuccess(DocumentReference documentReference) { Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId()); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "Error adding document", e); } });
Sekarang tambahkan dokumen lain ke koleksi users. Perhatikan bahwa dokumen ini berisi key-value pair (nama tengah) yang tidak muncul di dokumen pertama. Dokumen dalam koleksi dapat berisi kumpulan informasi yang berbeda.
Web
// Add a second document with a generated ID. import { addDoc, collection } from "firebase/firestore"; try { const docRef = await addDoc(collection(db, "users"), { first: "Alan", middle: "Mathison", last: "Turing", born: 1912 }); console.log("Document written with ID: ", docRef.id); } catch (e) { console.error("Error adding document: ", e); }
Web
// Add a second document with a generated ID. db.collection("users").add({ first: "Alan", middle: "Mathison", last: "Turing", born: 1912 }) .then((docRef) => { console.log("Document written with ID: ", docRef.id); }) .catch((error) => { console.error("Error adding document: ", error); });
Swift
// Add a second document with a generated ID. do { let ref = try await db.collection("users").addDocument(data: [ "first": "Alan", "middle": "Mathison", "last": "Turing", "born": 1912 ]) print("Document added with ID: \(ref.documentID)") } catch { print("Error adding document: \(error)") }
Kotlin
// Create a new user with a first, middle, and last name val user = hashMapOf( "first" to "Alan", "middle" to "Mathison", "last" to "Turing", "born" to 1912, ) // Add a new document with a generated ID db.collection("users") .add(user) .addOnSuccessListener { documentReference -> Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}") } .addOnFailureListener { e -> Log.w(TAG, "Error adding document", e) }
Java
// Create a new user with a first, middle, and last name Map<String, Object> user = new HashMap<>(); user.put("first", "Alan"); user.put("middle", "Mathison"); user.put("last", "Turing"); user.put("born", 1912); // Add a new document with a generated ID db.collection("users") .add(user) .addOnSuccessListener(new OnSuccessListener<DocumentReference>() { @Override public void onSuccess(DocumentReference documentReference) { Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId()); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "Error adding document", e); } });
Membaca data menggunakan operasi Core
Gunakan penampil data di Firebase console untuk memverifikasi dengan cepat bahwa Anda telah menambahkan data ke Cloud Firestore.
Anda juga dapat menggunakan metode "get" untuk mengambil seluruh koleksi.
Web
import { collection, getDocs } from "firebase/firestore"; const querySnapshot = await getDocs(collection(db, "users")); querySnapshot.forEach((doc) => { console.log(`${doc.id} => ${doc.data()}`); });
Web
db.collection("users").get().then((querySnapshot) => { querySnapshot.forEach((doc) => { console.log(`${doc.id} => ${doc.data()}`); }); });
Swift
do { let snapshot = try await db.collection("users").getDocuments() for document in snapshot.documents { print("\(document.documentID) => \(document.data())") } } catch { print("Error getting documents: \(error)") }
Kotlin
db.collection("users") .get() .addOnSuccessListener { result -> for (document in result) { Log.d(TAG, "${document.id} => ${document.data}") } } .addOnFailureListener { exception -> Log.w(TAG, "Error getting documents.", exception) }
Java
db.collection("users") .get() .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { if (task.isSuccessful()) { for (QueryDocumentSnapshot document : task.getResult()) { Log.d(TAG, document.getId() + " => " + document.getData()); } } else { Log.w(TAG, "Error getting documents.", task.getException()); } } });
Membaca data menggunakan operasi Pipeline
Sekarang Anda dapat membandingkan pengalaman kueri Pipeline dengan pengalaman kueri Core.
Web
const readDataPipeline = db.pipeline() .collection("users"); // Execute the pipeline and handle the result try { const querySnapshot = await execute(readDataPipeline); querySnapshot.results.forEach((result) => { console.log(`${result.id} => ${result.data()}`); }); } catch (error) { console.error("Error getting documents: ", error); }
Swift
do { // Initialize a Firestore Pipeline instance and specify the "users" collection as the // input stage. let snapshot = try await db.pipeline() .collection("users") .execute() // Execute the pipeline to retrieve documents. // Iterate through the documents in the pipeline results, similar to a regular query // snapshot. for result in snapshot.results { print("\(result.id ?? "no ID") => \(result.data)") } } catch { print("Error getting documents with pipeline: \(error)") }
Kotlin
val readDataPipeline = db.pipeline() .collection("users") // Execute the pipeline and handle the result readDataPipeline.execute() .addOnSuccessListener { result -> for (document in result) { println("${document.getId()} => ${document.getData()}") } } .addOnFailureListener { exception -> println("Error getting documents: $exception") }
Java
Pipeline readDataPipeline = db.pipeline() .collection("users"); readDataPipeline.execute() .addOnSuccessListener(new OnSuccessListener<Pipeline.Snapshot>() { @Override public void onSuccess(Pipeline.Snapshot snapshot) { for (PipelineResult result : snapshot.getResults()) { System.out.println(result.getId() + " => " + result.getData()); } } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { System.out.println("Error getting documents: " + e); } });
Mengamankan data untuk SDK seluler dan web
Jika Anda menggunakan SDK platform web, Android, atau Apple, gunakan Firebase Authentication dan Cloud Firestore Security Rules untuk melindungi data Anda di Cloud Firestore.
Berikut adalah beberapa kumpulan aturan dasar yang dapat Anda gunakan untuk memulai. Anda dapat mengubah aturan keamanan di tab Aturan konsol.
Auth diperlukan
// 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;
}
}
}
Mode produksi
// Deny read/write access to all users under any conditions
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
Sebelum men-deploy aplikasi web, Android, atau iOS ke produksi, lakukan juga langkah-langkah untuk memastikan bahwa hanya klien aplikasi yang dapat mengakses data Cloud Firestore Anda. Lihat dokumentasi App Check.
Jika Anda menggunakan salah satu SDK server, gunakan Identity and Access Management (IAM) untuk melindungi data di Cloud Firestore.
Langkah berikutnya
Perdalam pengetahuan Anda tentang operasi Core dan Pipeline dengan topik berikut:
- Pelajari lebih lanjut cara membuat kueri dengan operasi Core
- Pelajari lebih lanjut cara membuat kueri dengan operasi Pipeline.