במדריך הזה נסביר איך להגדיר את Firestore Enterprise, להוסיף נתונים ואז להשתמש בפעולות ליבה או בפעולות צינור עיבוד נתונים כדי לשלוח שאילתות לגבי הנתונים שהוספתם במסוף Firebase.
Cloud Firestore תומך בערכות SDK לנייד או לאינטרנט ובספריות לקוח של השרת:
Cloud Firestore תומך בערכות SDK ל-Android, ל-iOS, לאינטרנט ועוד. בשילוב עם Cloud Firestore Security Rules ו-Firebase Authentication, ערכות ה-SDK לנייד ולאינטרנט תומכות בארכיטקטורות של אפליקציות ללא שרת (serverless), שבהן הלקוחות מתחברים ישירות למסד הנתונים של Cloud Firestore.
ב-Cloud Firestore יש תמיכה בספריות לקוח של שרת ל-Java, ל-Node.js ול-Python. אתם יכולים להשתמש בספריות הלקוח האלה כדי להגדיר סביבות שרת עם הרשאות וגישה מלאה למסד הנתונים. מידע נוסף על הספריות האלה זמין במאמר מדריך למתחילים בנושא ספריות לקוח של שרת.
הנחיית AI לעזרה מבוססת-AI
כדי לקבל עזרה מ-AI, מעתיקים את ההנחיה שלמטה ומדביקים אותה בסוכן ה-AI לתכנות (כמו Gemini ב-Android Studio, Antigravity, Claude Code, Codex ו-Cursor). אתם יכולים להתאים אישית את ההנחיה ולשפר את הסוכן. מידע מפורט על ההתקנה זמין במאמר סקילים אג'נטיים ב-Firebase.
Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me set up and use Firebase for the backend of my app. Set up Firestore database in **Enterprise edition**. Help me to choose the best location for my database instance.
יצירת מסד נתונים במהדורת Firestore Enterprise
אם עדיין לא יצרתם פרויקט ב-Firebase: במסוף Firebase, לוחצים על Add project ופועלים לפי ההוראות במסך כדי ליצור פרויקט ב-Firebase או להוסיף שירותי Firebase לפרויקט קיים ב-Google Cloud.
בחלונית שמימין, עוברים אל Databases & Storage > Firestore.
לוחצים על Create database.
בוחרים באפשרות Enterprise כמצב מסד הנתונים.
בוחרים באפשרות Firestore in Native Mode כמצב הפעולה, שתומך בפעולות Core ו-Pipeline.
בוחרים מיקום למסד הנתונים.
צריך לבחור מצב התחלה ל-Cloud Firestore Security Rules:
- מצב בדיקה
מתאים לתחילת העבודה עם ספריות הלקוח לנייד ולאינטרנט, אבל מאפשר לכל אחד לקרוא את הנתונים שלכם ולשכתב אותם. אחרי הבדיקה, חשוב לעיין בקטע אבטחת הנתונים.
כדי להתחיל להשתמש ב-SDK לאינטרנט, לפלטפורמות של Apple או ל-Android, בוחרים במצב בדיקה.
- מצב ייצור
דוחה את כל פעולות הקריאה והכתיבה מלקוחות בנייד ובאינטרנט. שרתי האפליקציות המאומתים (Python) עדיין יכולים לגשת למסד הנתונים.
הקבוצה הראשונית של Cloud Firestore Security Rules תחול על מסד הנתונים שמוגדר כברירת מחדל ב-Cloud Firestore. אם יוצרים כמה מסדי נתונים לפרויקט, אפשר לפרוס את Cloud Firestore Security Rules לכל מסד נתונים.
לוחצים על יצירה.
כשמפעילים את מהדורת Firestore Enterprise, ה-API מופעל גם במנהל ה-API של Cloud.
הגדרת סביבת הפיתוח
מוסיפים לאפליקציה את התלויות וספריות הלקוח הנדרשות.
Web
- פועלים לפי ההוראות להוספת Firebase לאפליקציית האינטרנט.
-
SDK של Cloud Firestore זמין כחבילת npm.
צריך לייבא גם את Firebase וגם את Cloud Firestore.npm install firebase@13.0.0 --save
import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore";
iOS+
פועלים לפי ההוראות להוספת Firebase לאפליקציה ל-Apple.
משתמשים ב-Swift Package Manager כדי להתקין ולנהל את יחסי התלות של Firebase.
- ב-Xcode, כשהפרויקט של האפליקציה פתוח, עוברים אל File > Swift Packages > Add Package Dependency (קובץ > חבילות Swift > הוספת יחסי תלות בין חבילות).
- כשמוצגת בקשה, מוסיפים את מאגר ה-SDK של Firebase לפלטפורמות של אפל:
- בוחרים את הספרייה של Firestore.
- אחרי שתסיימו, פלטפורמת Xcode תתחיל לטפל ביחסי התלות ולהוריד אותם באופן אוטומטי ברקע.
https://github.com/firebase/firebase-ios-sdk
Android
- פועלים לפי ההוראות להוספת Firebase לאפליקציה ל-Android.
- באמצעות עץ המוצר (BoM) של Firebase ל-Android, מצהירים על התלות בספריית Cloud Firestore ל-Android בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל
app/build.gradle.ktsאוapp/build.gradle).dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:35.0.1")) // 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") }
כשמשתמשים בעץ המוצר (BoM) של Firebase ל-Android, האפליקציה תמיד משתמשת בגרסאות תואמות של ספריות Firebase ל-Android.
(אפשרות חלופית) מצהירים על יחסי תלות של ספריית Firebase בלי להשתמש ב- BoM
אם בוחרים לא להשתמש ב-Firebase BoM, צריך לציין את הגרסה של כל ספריית Firebase בשורת התלות שלה.
שימו לב: אם אתם משתמשים בכמה ספריות של Firebase באפליקציה, מומלץ מאוד להשתמש ב-BoM כדי לנהל את גרסאות הספרייה, וכך לוודא שכל הגרסאות תואמות.
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:27.0.0") }
מחפשים מודול ספרייה ספציפי ל-Kotlin? החל מגרסת אוקטובר 2023, גם מפתחי Kotlin וגם מפתחי Java יכולים להסתמך על מודול הספרייה הראשי (לפרטים, אפשר לעיין בשאלות הנפוצות לגבי היוזמה הזו).
מפעילים את Cloud Firestore
מאתחלים מכונה של 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');
מחליפים את FIREBASE_CONFIGURATION ב-firebaseConfig של אפליקציית האינטרנט.
כדי לשמר נתונים כשהמכשיר מאבד את הקישוריות, עיינו במאמרי העזרה בנושא הפעלת נתונים ממקורות אופליין.
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");
הוספת נתונים באמצעות פעולות ליבה
כדי לבחון את פעולות הליבה ופעולות הצינור לשליחת שאילתות על נתונים, הוסיפו נתונים למסד הנתונים באמצעות פעולות הליבה.
Cloud Firestore מאחסן נתונים במסמכים, שמאוחסנים באוספים. Cloud Firestore יוצר אוספים ומסמכים באופן משתמע בפעם הראשונה שמוסיפים נתונים למסמך. אין צורך ליצור אוספים או מסמכים באופן מפורש.
יוצרים אוסף חדש ומסמך באמצעות הקוד לדוגמה הבא.
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); } });
עכשיו צריך להוסיף עוד מסמך לאוסף users. שימו לב שהמסמך הזה כולל צמד מפתח/ערך (שם אמצעי) שלא מופיע במסמך הראשון. מסמכים באוסף יכולים להכיל קבוצות שונות של מידע.
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); } });
קריאת נתונים באמצעות פעולות ליבה
כדי לוודא במהירות שהוספתם נתונים ל-Cloud Firestore, אתם יכולים להשתמש בכלי להצגת נתונים במסוף Firebase.
אפשר גם להשתמש ב-method "get" כדי לאחזר את כל האוסף.
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()); } } });
קריאת נתונים באמצעות פעולות בצינור עיבוד נתונים
עכשיו אתם יכולים להשוות בין חוויית השאילתות ב-Pipeline לבין חוויית השאילתות ב-Core.
Web
// The import/require of "firebase/firestore/pipelines" has a side-effect // of extending the Firestore class with the `.pipeline()` method. // Without this import/require, you will not be able to create a Pipeline. // import { execute } from "firebase/firestore/pipelines"; const readDataPipeline = db.pipeline() .collection("users"); // Execute the pipeline and handle the result try { const querySnapshot = await execute(readDataPipeline); querySnapshot.results.forEach((result) => { console.log(`${result.id} => ${result.data()}`); }); } catch (error) { console.error("Error getting documents: ", error); }
Swift
do { // Initialize a Firestore Pipeline instance and specify the "users" collection as the // input stage. let snapshot = try await db.pipeline() .collection("users") .execute() // Execute the pipeline to retrieve documents. // Iterate through the documents in the pipeline results, similar to a regular query // snapshot. for result in snapshot.results { print("\(result.id ?? "no ID") => \(result.data)") } } catch { print("Error getting documents with pipeline: \(error)") }
Kotlin
val readDataPipeline = db.pipeline() .collection("users") // Execute the pipeline and handle the result readDataPipeline.execute() .addOnSuccessListener { result -> for (document in result) { println("${document.getId()} => ${document.getData()}") } } .addOnFailureListener { exception -> println("Error getting documents: $exception") }
Java
Pipeline readDataPipeline = db.pipeline() .collection("users"); readDataPipeline.execute() .addOnSuccessListener(new OnSuccessListener<Pipeline.Snapshot>() { @Override public void onSuccess(Pipeline.Snapshot snapshot) { for (PipelineResult result : snapshot.getResults()) { System.out.println(result.getId() + " => " + result.getData()); } } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { System.out.println("Error getting documents: " + e); } });
אבטחת הנתונים בערכות SDK לנייד ולאינטרנט
אם אתם משתמשים ב-SDK של פלטפורמות האינטרנט, Android או Apple, השתמשו באימות ב-Firebase ובCloud Firestore Security Rules כדי לאבטח את הנתונים ב-Cloud Firestore.
ריכזנו כאן כמה קבוצות כללים בסיסיות שיעזרו לכם להתחיל. אפשר לשנות את כללי האבטחה במסוף Firebase, בקטע Databases & Storage (מסדי נתונים ואחסון) > Firestore > הכרטיסייה Rules (כללים).
נדרש אימות
// 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;
}
}
}
מצב ייצור
// Deny read/write access to all users under any conditions
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
לפני שפורסים את האפליקציה לאינטרנט, ל-Android או לאפליקציה ל-iOS בסביבת הייצור, צריך גם לוודא שרק ללקוחות של האפליקציה יש גישה לנתונים של Cloud Firestore. לעיון במאמרי העזרה של App Check
אם אתם משתמשים באחת מערכות ה-SDK לשרת, השתמשו בניהול זהויות והרשאות גישה (IAM) כדי לאבטח את הנתונים ב-Cloud Firestore.
השלבים הבאים
כדי להעמיק את הידע שלכם על פעולות ליבה ופעולות צינור עיבוד נתונים, אתם יכולים לקרוא את הנושאים הבאים:
- מידע נוסף על שאילתות עם פעולות ליבה
- מידע נוסף על שאילתות באמצעות פעולות צינור עיבוד נתונים
- סקילים אג'נטיים ב-Firebase מאפשרים לכם לשפר את כלי הפיתוח מבוססי ה-AI כדי לבצע משימות בצורה יעילה יותר, ולהשתמש בשיטות המומלצות של Cloud Firestore (כמו כתיבת Cloud Firestore Security Rules).