يوضح لك دليل البدء السريع هذا كيفية إعداد Cloud Firestore وإضافة البيانات ثم عرض البيانات التي أضفتها للتو في وحدة تحكُّم Firebase.
إنشاء قاعدة بيانات Cloud Firestore
أنشئ مشروعًا في Firebase: في وحدة تحكُّم Firebase، انقر على إضافة مشروع، ثم اتّبِع التعليمات الظاهرة على الشاشة لإنشاء مشروع Firebase أو لإضافة خدمات Firebase إلى مشروع Google Cloud Platform حالي.
انتقِل إلى قسم Cloud Firestore في وحدة تحكُّم Firebase. سيُطلب منك اختيار مشروع حالي في Firebase. اتّبِع سير عمل إنشاء قاعدة البيانات.
اختَر وضع بدء لقواعد أمان Cloud Firestore:
- وضع الاختبار
جيدة لبدء استخدام مكتبات برامج الويب والجوَّال، ولكنها تسمح لأي شخص بقراءة بياناتك واستبدالها. بعد الاختبار، احرص على مراجعة قسم تأمين بياناتك.
لبدء استخدام الويب أو أنظمة Apple الأساسية أو حزمة تطوير البرامج (SDK) لنظام التشغيل Android، اختَر وضع الاختبار.
- وضع القفل
رفض جميع عمليات القراءة والكتابة من برامج الويب والأجهزة الجوّالة وسيظل بإمكان خوادم التطبيقات التي تمت مصادقتها (C# أو Go أو Java أو Node.js أو PHP أو Python أو Ruby) الوصول إلى قاعدة البيانات الخاصة بك.
لبدء استخدام مكتبة عملاء C# أو Go أو Java أو Node.js أو PHP أو Python أو Ruby، اختَر "الوضع المُقفَل".
سيتم تطبيق مجموعتك الأولية من قواعد أمان Cloud Firestore على قاعدة بيانات Cloud Firestore التلقائية. إذا أنشأت قواعد بيانات متعددة لمشروعك، يمكنك نشر قواعد أمان Cloud Firestore لكل قاعدة بيانات.
اختَر موقعًا لقاعدة بياناتك.
إنّ إعداد الموقع الجغرافي هذا هو الموقع الجغرافي التلقائي لموارد Google Cloud Platform (GCP) لمشروعك. تجدر الإشارة إلى أنّه سيتم استخدام هذا الموقع الجغرافي لخدمات Google Cloud Platform في مشروعك التي تتطلّب ضبط إعدادات الموقع الجغرافي، وتحديدًا الحزمة التلقائية Cloud Storage وتطبيق App Engine (المطلوب في حال استخدام Cloud Scheduler).
إذا لم تتمكّن من اختيار موقع جغرافي، يعني ذلك أنّ مشروعك يحتوي على موقع جغرافي تلقائي لمورد Google Cloud Platform. تم إعداده إما أثناء إنشاء المشروع أو عند إعداد خدمة أخرى تتطلب إعداد الموقع.
انقر على تم.
عند تفعيل Cloud Firestore، يتم أيضًا تفعيل واجهة برمجة التطبيقات في Cloud API Manager.
إعداد بيئة التطوير
أضِف الموارد التابعة ومكتبات العملاء المطلوبة إلى تطبيقك.
واجهة برمجة التطبيقات لمساحة الاسم على الويب
- اتّبِع التعليمات من أجل إضافة Firebase إلى تطبيق الويب.
- أضِف مكتبتَي Firebase وCloud Firestore إلى تطبيقك:
<script src="https://www.gstatic.com/firebasejs/10.12.2/firebase-app-compat.js"></script> <script src="https://www.gstatic.com/firebasejs/10.12.2/firebase-firestore-compat.js"></script>
تتوفّر حزمة تطوير البرامج (SDK) في Cloud Firestore أيضًا على شكل حزمة npm.npm install firebase@10.12.2 --save
عليك طلب كل من Firebase وCloud Firestore يدويًا.import firebase from "firebase/compat/app"; // Required for side-effects import "firebase/firestore";
واجهة برمجة التطبيقات Web modular API
- اتّبِع التعليمات من أجل إضافة Firebase إلى تطبيق الويب.
-
تتوفر حزمة Cloud Firestore SDK كحزمة npm.
npm install firebase@10.12.2 --save
ستحتاج إلى استيراد كلٍّ من Firebase وCloud Firestore.import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore";
iOS+
اتّبِع التعليمات لإضافة Firebase إلى تطبيق Apple.
يمكنك استخدام "مدير حزم Swift" لتثبيت اعتماديات Firebase وإدارتها.
- في Xcode، بعد فتح مشروع تطبيقك، انتقِل إلى File > Swift Packages > إضافة تبعية الحزمة.
- أضِف مستودع حزمة تطوير البرامج (SDK) لمنصّات Firebase Apple عندما يُطلب منك ذلك:
- اختَر مكتبة Firestore.
- عند الانتهاء، ستبدأ خدمة Xcode تلقائيًا في حلّ المشاكل المتعلّقة بالعناصر التي تعتمد عليها وتنزيلها في الخلفية.
https://github.com/firebase/firebase-ios-sdk
Android
- اتّبِع التعليمات لإضافة Firebase إلى تطبيقك على Android.
- باستخدام أداة إدارة قوائم Android من Firebase،
يمكنك توضيح مدى اعتماد مكتبة 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:33.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") }
عند استخدام قائمة مواد Android في Firebase، سيستخدم تطبيقك دائمًا إصدارات متوافقة من مكتبات Android في Firebase.
(Alternative) يُرجى تعريف تبعيات مكتبة Firebase بدون باستخدام BoM.
إذا اخترت عدم استخدام قائمة العناصر في Firebase، يجب تحديد كل إصدار من مكتبة 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:25.0.0") }
هل تبحث عن وحدة مكتبة خاصة بلغة Kotlin؟ اعتبارًا من إصدار تشرين الأول (أكتوبر) 2023، قد يعتمد مطوّرو لغة Kotlin وJava على وحدة المكتبة الرئيسية (لمعرفة التفاصيل، يُرجى الاطّلاع على الأسئلة الشائعة حول هذه المبادرة).
Dart
- عليك ضبط إعدادات Firebase وإعدادها في تطبيق Flutter، إذا لم يسبق لك إجراء ذلك.
- من جذر مشروع Flutter، شغِّل الأمر التالي لتثبيت المكوِّن الإضافي:
flutter pub add cloud_firestore
- بعد إكمال الخطوات، أعِد إنشاء تطبيق Flutter:
flutter run
- اختياري: يمكنك تحسين أوقات إنشاء نظامَي التشغيل iOS وmacOS من خلال تضمين إطار العمل المجمَّع مسبقًا.
في الوقت الحالي، تعتمد حزمة تطوير البرامج (SDK) في Firestore لنظام التشغيل iOS على رمز برمجي يمكن أن يستغرق إنشاؤه في Xcode مدة تصل إلى 5 دقائق. لتقليل الوقت المستغرَق في الإنشاء بشكل كبير، يمكنك استخدام نسخة مجمّعة مسبقًا عن طريق إضافة هذا السطر إلى كتلة
target 'Runner' do
في Podfile:target 'Runner' do use_frameworks! use_modular_headers! pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => 'IOS_SDK_VERSION' flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) target 'RunnerTests' do inherit! :search_paths end end
استبدِل IOS_SDK_VERSION بإصدار حزمة تطوير البرامج (SDK) لنظام التشغيل iOS بمنصة Firebase المحدّد في ملف
firebase_sdk_version.rb
firebase_core
. إذا كنت لا تستخدم أحدث إصدار منfirebase_core
، ابحث عن هذا الملف في ذاكرة التخزين المؤقت لحزمة Pub المحلية (عادةً ما يكون~/.pub-cache
).بالإضافة إلى ذلك، يُرجى التأكّد من ترقية CocoaPods إلى الإصدار 1.9.1 أو إصدار أحدث:
gem install cocoapods
لمزيد من المعلومات، يمكنك الاطّلاع على المشكلة على GitHub.
Java
- أضِف حزمة تطوير البرامج (SDK) لمشرف Firebase إلى تطبيقك:
-
استخدام Gradle:
compile 'com.google.firebase:firebase-admin:1.32.0'
-
باستخدام Maven:
<dependency> <groupId>com.google.firebase</groupId> <artifactId>firebase-admin</artifactId> <version>1.32.0</version> </dependency>
-
استخدام Gradle:
- اتّبِع التعليمات أدناه لإعداد Cloud Firestore باستخدام بيانات الاعتماد المناسبة في بيئتك.
Python
- أضِف حزمة تطوير البرامج (SDK) لمشرف Firebase إلى تطبيق Python:
pip install --upgrade firebase-admin
- اتّبِع التعليمات أدناه لإعداد Cloud Firestore باستخدام بيانات الاعتماد المناسبة في بيئتك.
C++
- اتّبِع التعليمات من أجل إضافة Firebase إلى مشروع C++.
- واجهة C++ لنظام التشغيل Android
- تبعيات Gradle: أضِف ما يلي إلى ملف Gradle للوحدة (على مستوى التطبيق) (عادةً
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 }
- التبعيات الثنائية: وبالمثل، فإنّ الطريقة التي يُنصح بها للحصول على الاعتماديات الثنائية هي إضافة ما يلي إلى ملف
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}")
- لإعداد دمج جهاز كمبيوتر سطح المكتب، يُرجى الاطّلاع على إضافة Firebase إلى مشروع C++.
Unity
- اتّبِع التعليمات من أجل إضافة Firebase إلى مشروع Unity.
- استخدِم واجهة Unity لضبط مشروعك على تقليل إصدارات Android.
- يمكن العثور على الخيار في إعدادات المشغّل > Android > إعدادات النشر > تصغير.
- قد تختلف الخيارات في إصدارات مختلفة من Unity، لذا راجِع مستندات Unity الرسمية ودليل تصحيح الأخطاء في Unity Build على Firebase.
-
بعد تفعيل عملية تصغير البيانات، إذا استمرّ عدد الطرق المُشار إليها في تجاوز الحدّ الأقصى،
هناك خيار آخر وهو تفعيل
multidex
في:-
mainTemplate.gradle
في حال تفعيل نموذج Gradle المخصّص ضمن إعدادات المشغّل -
أو ملف
build.gradle
على مستوى الوحدة، في حال استخدام "استوديو Android" لإنشاء المشروع الذي تم تصديره.
-
عليك تصغير الإصدار لتجنُّب الرسالة Error while merging dex archives
.
Node.js
-
أضِف حزمة تطوير البرامج (SDK) لمشرف Firebase إلى تطبيقك:
npm install firebase-admin --save
- اتّبِع التعليمات أدناه لإعداد Cloud Firestore باستخدام بيانات الاعتماد المناسبة في بيئتك.
Go
- أضِف حزمة تطوير البرامج (SDK) لمشرف Firebase إلى تطبيقك على Go:
go get firebase.google.com/go
- اتّبِع التعليمات أدناه لإعداد Cloud Firestore باستخدام بيانات الاعتماد المناسبة في بيئتك.
PHP
-
تستخدم مكتبات عملاء خادم Cloud Firestore (Java وNode.js وPython وGo وPHP وC# وRuby) بيانات الاعتماد التلقائية لتطبيق Google للمصادقة.
-
للمصادقة من بيئة التطوير، اضبط متغيّر بيئة
GOOGLE_APPLICATION_CREDENTIALS
للتوجيه إلى ملف مفتاح حساب خدمة JSON. يمكنك إنشاء ملف مفتاح في صفحة بيانات اعتماد وحدة تحكم واجهة برمجة التطبيقات.export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
- في بيئة الإنتاج، لا تحتاج إلى إجراء مصادقة في حال تشغيل التطبيق على App Engine أو Compute Engine، باستخدام المشروع نفسه الذي تستخدمه في Cloud Firestore. إذا لم تفعل ذلك، يمكنك إعداد حساب خدمة.
-
للمصادقة من بيئة التطوير، اضبط متغيّر بيئة
- ثبِّت إضافة gRPC وفعِّلها للغة PHP، والتي ستحتاج إليها لاستخدام مكتبة البرامج.
-
إضافة مكتبة PHP في Cloud Firestore إلى تطبيقك:
composer require google/cloud-firestore
C#
-
تستخدم مكتبات عملاء خادم Cloud Firestore (Java وNode.js وPython وGo وPHP وC# وRuby) بيانات الاعتماد التلقائية لتطبيق Google للمصادقة.
-
للمصادقة من بيئة التطوير، اضبط متغيّر بيئة
GOOGLE_APPLICATION_CREDENTIALS
للتوجيه إلى ملف مفتاح حساب خدمة JSON. يمكنك إنشاء ملف مفتاح في صفحة بيانات اعتماد وحدة تحكم واجهة برمجة التطبيقات.export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
- في بيئة الإنتاج، لا تحتاج إلى إجراء مصادقة في حال تشغيل التطبيق على App Engine أو Compute Engine، باستخدام المشروع نفسه الذي تستخدمه في Cloud Firestore. إذا لم تفعل ذلك، يمكنك إعداد حساب خدمة.
-
للمصادقة من بيئة التطوير، اضبط متغيّر بيئة
-
أضِف مكتبة Cloud Firestore C# إلى تطبيقك في ملف
.csproj
:<ItemGroup> <PackageReference Include="Google.Cloud.Firestore" Version="1.1.0-beta01" /> </ItemGroup>
-
أضِف ما يلي إلى ملف
Program.cs
:using Google.Cloud.Firestore;
لغة Ruby
-
تستخدم مكتبات عملاء خادم Cloud Firestore (Java وNode.js وPython وGo وPHP وC# وRuby) بيانات الاعتماد التلقائية لتطبيق Google للمصادقة.
-
للمصادقة من بيئة التطوير، اضبط متغيّر بيئة
GOOGLE_APPLICATION_CREDENTIALS
للتوجيه إلى ملف مفتاح حساب خدمة JSON. يمكنك إنشاء ملف مفتاح في صفحة بيانات اعتماد وحدة تحكم واجهة برمجة التطبيقات.export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
- في بيئة الإنتاج، لا تحتاج إلى إجراء مصادقة في حال تشغيل التطبيق على App Engine أو Compute Engine، باستخدام المشروع نفسه الذي تستخدمه في Cloud Firestore. إذا لم تفعل ذلك، يمكنك إعداد حساب خدمة.
-
للمصادقة من بيئة التطوير، اضبط متغيّر بيئة
-
أضِف مكتبة Ruby في Cloud Firestore إلى تطبيقك في
Gemfile
:gem "google-cloud-firestore"
-
ثبِّت الاعتماديات من
Gemfile
باستخدام:bundle install
(اختياري) إنشاء نموذج أولي واختباره باستخدام "حزمة أدوات المحاكاة المحلية من Firebase"
قبل الحديث عن طريقة كتابة تطبيقك في Cloud Firestore وطريقة قراءتهما في Cloud Firestore، سنطّلع على مجموعة من الأدوات التي يمكن استخدامها لإنشاء نموذج أولي لوظائف Cloud Firestore واختبارها وهي: Firebase Local Emulator Suite إذا كنت تختبر نماذج بيانات مختلفة، أو تحسّن قواعد الأمان لديك أو تعمل على إيجاد الطريقة الأكثر فعالية من حيث التكلفة للتفاعل مع الخلفية، فقد تكون القدرة على العمل محليًا دون نشر خدمات مباشرة رائعة.
يُعد المحاكي Cloud Firestore جزءًا من مجموعة أدوات المحاكاة المحلية التي تمكّن تطبيقك من التفاعل مع محتوى قاعدة البيانات التي تمّت محاكاتها وإعداداتها، بالإضافة إلى موارد المشروع التي تمّت محاكاتها (الوظائف وقواعد البيانات الأخرى وقواعد الأمان).
يتطلب استخدام محاكي Cloud Firestore بضع خطوات فقط:
- إضافة سطر من الرمز إلى إعدادات اختبار تطبيقك للاتصال بالمحاكي.
- من جذر دليل المشروع المحلي، مع تشغيل
firebase emulators:start
. - إجراء الاتصالات من رمز النموذج الأولي لتطبيقك باستخدام حزمة SDK لمنصة Cloud Firestore كالعادة.
تتوفر جولة تفصيلية تشمل Cloud Firestore وCloud Functions. ومن المفترض أيضًا أن تُلقي نظرة على مقدمة حول مجموعة أدوات المحاكاة المحلية.
إعداد Cloud Firestore
تهيئة مثيل من Cloud Firestore:
واجهة برمجة التطبيقات Web modular API
import { initializeApp } from "firebase/app"; import { getFirestore } from "firebase/firestore"; // TODO: Replace the following with your app's Firebase project configuration // See: https://support.google.com/firebase/answer/7015592 const firebaseConfig = { FIREBASE_CONFIGURATION }; // Initialize Firebase const app = initializeApp(firebaseConfig); // Initialize Cloud Firestore and get a reference to the service const db = getFirestore(app);
استبدِل FIREBASE_CONFIGURATION بـ
firebaseConfig
في تطبيق الويب.
للاحتفاظ بالبيانات عند انقطاع اتصال الجهاز بالإنترنت، يمكنك الاطّلاع على مستندات تفعيل البيانات بلا اتصال بالإنترنت.
واجهة برمجة التطبيقات لمساحة الاسم على الويب
import firebase from "firebase/app"; import "firebase/firestore"; // TODO: Replace the following with your app's Firebase project configuration // See: https://support.google.com/firebase/answer/7015592 const firebaseConfig = { FIREBASE_CONFIGURATION }; // Initialize Firebase firebase.initializeApp(firebaseConfig); // Initialize Cloud Firestore and get a reference to the service const db = firebase.firestore();
استبدِل FIREBASE_CONFIGURATION بـ
firebaseConfig
في تطبيق الويب.
للاحتفاظ بالبيانات عند انقطاع اتصال الجهاز بالإنترنت، يمكنك الاطّلاع على مستندات تفعيل البيانات بلا اتصال بالإنترنت.
سريع
import FirebaseCore import FirebaseFirestore
FirebaseApp.configure() let db = Firestore.firestore()
الهدف-ج
@import FirebaseCore; @import FirebaseFirestore; // Use Firebase library to configure APIs [FIRApp configure];
FIRFirestore *defaultFirestore = [FIRFirestore firestore];
Kotlin+KTX
// Access a Cloud Firestore instance from your Activity
val db = Firebase.firestore
Java
// Access a Cloud Firestore instance from your Activity
FirebaseFirestore db = FirebaseFirestore.getInstance();
Dart
db = FirebaseFirestore.instance;
Java
يتم إعداد حزمة تطوير البرامج (SDK) في Cloud Firestore بطرق مختلفة بناءً على بيئتك. وفي ما يلي الطرق الأكثر شيوعًا. للحصول على مرجع كامل، يُرجى الاطّلاع على إعداد حزمة تطوير البرامج (SDK) للمشرف.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();
لاستخدام "SDK لمشرف Firebase" على خادمك، استخدِم حساب خدمة.
انتقِل إلى إدارة الهوية وإمكانية الوصول والمشرف > حسابات الخدمة في Google Cloud Console. أنشِئ مفتاحًا خاصًا جديدًا واحفظ ملف JSON. بعد ذلك، استخدِم الملف لإعداد حزمة تطوير البرامج (SDK):
import com.google.auth.oauth2.GoogleCredentials; import com.google.cloud.firestore.Firestore; import com.google.firebase.FirebaseApp; import com.google.firebase.FirebaseOptions; // Use a service account InputStream serviceAccount = new FileInputStream("path/to/serviceAccount.json"); GoogleCredentials credentials = GoogleCredentials.fromStream(serviceAccount); FirebaseOptions options = new FirebaseOptions.Builder() .setCredentials(credentials) .build(); FirebaseApp.initializeApp(options); Firestore db = FirestoreClient.getFirestore();
Python
يتم إعداد حزمة تطوير البرامج (SDK) في Cloud Firestore بطرق مختلفة بناءً على بيئتك. وفي ما يلي الطرق الأكثر شيوعًا. للحصول على مرجع كامل، يُرجى الاطّلاع على إعداد حزمة تطوير البرامج (SDK) للمشرف.import firebase_admin from firebase_admin import firestore # Application Default credentials are automatically created. app = firebase_admin.initialize_app() db = firestore.client()
يمكن أيضًا استخدام بيانات اعتماد افتراضية حالية للتطبيق لتهيئة حزمة SDK.
import firebase_admin from firebase_admin import credentials from firebase_admin import firestore # Use the application default credentials. cred = credentials.ApplicationDefault() firebase_admin.initialize_app(cred) db = firestore.client()
لاستخدام "SDK لمشرف Firebase" على خادمك، استخدِم حساب خدمة.
انتقِل إلى إدارة الهوية وإمكانية الوصول والمشرف > حسابات الخدمة في Google Cloud Console. أنشِئ مفتاحًا خاصًا جديدًا واحفظ ملف JSON. بعد ذلك، استخدِم الملف لإعداد حزمة تطوير البرامج (SDK):
import firebase_admin from firebase_admin import credentials from firebase_admin import firestore # Use a service account. cred = credentials.Certificate('path/to/serviceAccount.json') app = firebase_admin.initialize_app(cred) db = firestore.client()
Python
يتم إعداد حزمة تطوير البرامج (SDK) في Cloud Firestore بطرق مختلفة بناءً على بيئتك. وفي ما يلي الطرق الأكثر شيوعًا. للحصول على مرجع كامل، يُرجى الاطّلاع على إعداد حزمة تطوير البرامج (SDK) للمشرف.import firebase_admin from firebase_admin import firestore_async # Application Default credentials are automatically created. app = firebase_admin.initialize_app() db = firestore_async.client()
يمكن أيضًا استخدام بيانات اعتماد افتراضية حالية للتطبيق لتهيئة حزمة SDK.
import firebase_admin from firebase_admin import credentials from firebase_admin import firestore_async # Use the application default credentials. cred = credentials.ApplicationDefault() firebase_admin.initialize_app(cred) db = firestore_async.client()
لاستخدام "SDK لمشرف Firebase" على خادمك، استخدِم حساب خدمة.
انتقِل إلى إدارة الهوية وإمكانية الوصول والمشرف > حسابات الخدمة في Google Cloud Console. أنشِئ مفتاحًا خاصًا جديدًا واحفظ ملف JSON. بعد ذلك، استخدِم الملف لإعداد حزمة تطوير البرامج (SDK):
import firebase_admin from firebase_admin import credentials from firebase_admin import firestore_async # Use a service account. cred = credentials.Certificate('path/to/serviceAccount.json') app = firebase_admin.initialize_app(cred) db = firestore_async.client()
C++
// Make sure the call to `Create()` happens some time before you call Firestore::GetInstance(). App::Create(); Firestore* db = Firestore::GetInstance();
Node.js
يتم إعداد حزمة تطوير البرامج (SDK) في Cloud Firestore بطرق مختلفة بناءً على بيئتك. وفي ما يلي الطرق الأكثر شيوعًا. للحصول على مرجع كامل، يُرجى الاطّلاع على إعداد حزمة تطوير البرامج (SDK) للمشرف.-
الإعداد باستخدام دوال Cloud
const { initializeApp, applicationDefault, cert } = require('firebase-admin/app'); const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
initializeApp(); const db = getFirestore();
-
الإعداد على Google Cloud
const { initializeApp, applicationDefault, cert } = require('firebase-admin/app'); const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
initializeApp({ credential: applicationDefault() }); const db = getFirestore();
-
الإعداد على خادمك الخاص
لاستخدام "حزمة SDK لمشرفي Firebase" على خادمك الخاص (أو أي بيئة Node.js أخرى)، استخدِم حساب خدمة. انتقِل إلى إدارة الهوية وإمكانية الوصول والمشرف > حسابات الخدمة في Google Cloud Console. أنشِئ مفتاحًا خاصًا جديدًا واحفظ ملف JSON. بعد ذلك، استخدِم الملف لإعداد حزمة تطوير البرامج (SDK):
const { initializeApp, applicationDefault, cert } = require('firebase-admin/app'); const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
const serviceAccount = require('./path/to/serviceAccountKey.json'); initializeApp({ credential: cert(serviceAccount) }); const db = getFirestore();
Go
يتم إعداد حزمة تطوير البرامج (SDK) في Cloud Firestore بطرق مختلفة بناءً على بيئتك. وفي ما يلي الطرق الأكثر شيوعًا. للحصول على مرجع كامل، يُرجى الاطّلاع على إعداد حزمة تطوير البرامج (SDK) للمشرف.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()
لاستخدام "SDK لمشرف Firebase" على خادمك، استخدِم حساب خدمة.
انتقِل إلى إدارة الهوية وإمكانية الوصول والمشرف > حسابات الخدمة في Google Cloud Console. أنشِئ مفتاحًا خاصًا جديدًا واحفظ ملف JSON. بعد ذلك، استخدِم الملف لإعداد حزمة تطوير البرامج (SDK):
import ( "log" firebase "firebase.google.com/go" "google.golang.org/api/option" ) // Use a service account ctx := context.Background() sa := option.WithCredentialsFile("path/to/serviceAccount.json") app, err := firebase.NewApp(ctx, nil, sa) if err != nil { log.Fatalln(err) } client, err := app.Firestore(ctx) if err != nil { log.Fatalln(err) } defer client.Close()
PHP
PHP
لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.
Unity
using Firebase.Firestore; using Firebase.Extensions;
FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
C#
C#
لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.
لغة Ruby
إضافة بيانات
تخزِّن Cloud Firestore البيانات في "المستندات" التي يتم تخزينها في "المجموعات". تنشئ Cloud Firestore مجموعات ومستندات ضمنيًا في المرة الأولى التي تضيف فيها بيانات إلى المستند. فإنك لست بحاجة إلى إنشاء مجموعات أو مستندات بشكل صريح.
أنشئ مجموعة جديدة ومستندًا باستخدام مثال الرمز التالي.
واجهة برمجة التطبيقات Web modular API
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); }
واجهة برمجة التطبيقات لمساحة الاسم على الويب
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)") }
Objective-C
// Add a new document with a generated ID __block FIRDocumentReference *ref = [[self.db collectionWithPath:@"users"] addDocumentWithData:@{ @"first": @"Ada", @"last": @"Lovelace", @"born": @1815 } completion:^(NSError * _Nullable error) { if (error != nil) { NSLog(@"Error adding document: %@", error); } else { NSLog(@"Document added with ID: %@", ref.documentID); } }];
Kotlin+KTX
// Create a new user with a first and last name val user = hashMapOf( "first" to "Ada", "last" to "Lovelace", "born" to 1815, ) // Add a new document with a generated ID db.collection("users") .add(user) .addOnSuccessListener { documentReference -> Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}") } .addOnFailureListener { e -> Log.w(TAG, "Error adding document", e) }
Java
// Create a new user with a first and last name Map<String, Object> user = new HashMap<>(); user.put("first", "Ada"); user.put("last", "Lovelace"); user.put("born", 1815); // Add a new document with a generated ID db.collection("users") .add(user) .addOnSuccessListener(new OnSuccessListener<DocumentReference>() { @Override public void onSuccess(DocumentReference documentReference) { Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId()); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "Error adding document", e); } });
Dart
// Create a new user with a first and last name final user = <String, dynamic>{ "first": "Ada", "last": "Lovelace", "born": 1815 }; // Add a new document with a generated ID db.collection("users").add(user).then((DocumentReference doc) => print('DocumentSnapshot added with ID: ${doc.id}'));
Java
Python
Python
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
Go
PHP
PHP
لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.
Unity
DocumentReference docRef = db.Collection("users").Document("alovelace"); Dictionary<string, object> user = new Dictionary<string, object> { { "First", "Ada" }, { "Last", "Lovelace" }, { "Born", 1815 }, }; docRef.SetAsync(user).ContinueWithOnMainThread(task => { Debug.Log("Added data to the alovelace document in the users collection."); });
C#
لغة Ruby
يمكنك الآن إضافة مستند آخر إلى مجموعة users
. لاحظ أن هذا المستند يتضمن زوجًا من المفتاح/القيمة (الاسم الأوسط) الذي لا يظهر في المستند الأول. يمكن أن تحتوي المستندات في المجموعة على مجموعات مختلفة من المعلومات.
واجهة برمجة التطبيقات Web modular API
// 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); }
واجهة برمجة التطبيقات لمساحة الاسم على الويب
// 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)") }
Objective-C
// Add a second document with a generated ID. __block FIRDocumentReference *ref = [[self.db collectionWithPath:@"users"] addDocumentWithData:@{ @"first": @"Alan", @"middle": @"Mathison", @"last": @"Turing", @"born": @1912 } completion:^(NSError * _Nullable error) { if (error != nil) { NSLog(@"Error adding document: %@", error); } else { NSLog(@"Document added with ID: %@", ref.documentID); } }];
Kotlin+KTX
// Create a new user with a first, middle, and last name val user = hashMapOf( "first" to "Alan", "middle" to "Mathison", "last" to "Turing", "born" to 1912, ) // Add a new document with a generated ID db.collection("users") .add(user) .addOnSuccessListener { documentReference -> Log.d(TAG, "DocumentSnapshot added with ID: ${documentReference.id}") } .addOnFailureListener { e -> Log.w(TAG, "Error adding document", e) }
Java
// Create a new user with a first, middle, and last name Map<String, Object> user = new HashMap<>(); user.put("first", "Alan"); user.put("middle", "Mathison"); user.put("last", "Turing"); user.put("born", 1912); // Add a new document with a generated ID db.collection("users") .add(user) .addOnSuccessListener(new OnSuccessListener<DocumentReference>() { @Override public void onSuccess(DocumentReference documentReference) { Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId()); } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "Error adding document", e); } });
Dart
// Create a new user with a first and last name final user = <String, dynamic>{ "first": "Alan", "middle": "Mathison", "last": "Turing", "born": 1912 }; // Add a new document with a generated ID db.collection("users").add(user).then((DocumentReference doc) => print('DocumentSnapshot added with ID: ${doc.id}'));
Java
Python
Python
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
Go
PHP
PHP
لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.
Unity
DocumentReference docRef = db.Collection("users").Document("aturing"); Dictionary<string, object> user = new Dictionary<string, object> { { "First", "Alan" }, { "Middle", "Mathison" }, { "Last", "Turing" }, { "Born", 1912 } }; docRef.SetAsync(user).ContinueWithOnMainThread(task => { Debug.Log("Added data to the aturing document in the users collection."); });
C#
لغة Ruby
قراءة البيانات
ويمكنك استخدام عارض البيانات في وحدة تحكُّم Firebase للتحقق سريعًا من إضافة البيانات إلى Cloud Firestore.
يمكنك أيضًا استخدام طريقة "get" لاسترداد المجموعة بأكملها.
واجهة برمجة التطبيقات Web modular API
import { collection, getDocs } from "firebase/firestore"; const querySnapshot = await getDocs(collection(db, "users")); querySnapshot.forEach((doc) => { console.log(`${doc.id} => ${doc.data()}`); });
واجهة برمجة التطبيقات لمساحة الاسم على الويب
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)") }
Objective-C
[[self.db collectionWithPath:@"users"] getDocumentsWithCompletion:^(FIRQuerySnapshot * _Nullable snapshot, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error getting documents: %@", error); } else { for (FIRDocumentSnapshot *document in snapshot.documents) { NSLog(@"%@ => %@", document.documentID, document.data); } } }];
Kotlin+KTX
db.collection("users") .get() .addOnSuccessListener { result -> for (document in result) { Log.d(TAG, "${document.id} => ${document.data}") } } .addOnFailureListener { exception -> Log.w(TAG, "Error getting documents.", exception) }
Java
db.collection("users") .get() .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { if (task.isSuccessful()) { for (QueryDocumentSnapshot document : task.getResult()) { Log.d(TAG, document.getId() + " => " + document.getData()); } } else { Log.w(TAG, "Error getting documents.", task.getException()); } } });
Dart
await db.collection("users").get().then((event) { for (var doc in event.docs) { print("${doc.id} => ${doc.data()}"); } });
Java
Python
users_ref = db.collection("users") docs = users_ref.stream() for doc in docs: print(f"{doc.id} => {doc.to_dict()}")
Python
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
Go
PHP
PHP
لمزيد من المعلومات حول تثبيت برنامج Cloud Firestore وإنشاءه، يُرجى الرجوع إلى مكتبات عميل Cloud Firestore.
Unity
CollectionReference usersRef = db.Collection("users"); usersRef.GetSnapshotAsync().ContinueWithOnMainThread(task => { QuerySnapshot snapshot = task.Result; foreach (DocumentSnapshot document in snapshot.Documents) { Debug.Log(String.Format("User: {0}", document.Id)); Dictionary<string, object> documentDictionary = document.ToDictionary(); Debug.Log(String.Format("First: {0}", documentDictionary["First"])); if (documentDictionary.ContainsKey("Middle")) { Debug.Log(String.Format("Middle: {0}", documentDictionary["Middle"])); } Debug.Log(String.Format("Last: {0}", documentDictionary["Last"])); Debug.Log(String.Format("Born: {0}", documentDictionary["Born"])); } Debug.Log("Read all data from the users collection."); });
C#
لغة Ruby
تأمين بياناتك
إذا كنت تستخدم حزمة تطوير البرامج (SDK) لمنصات الويب أو Android أو Apple، استخدِم مصادقة Firebase وقواعد أمان Cloud Firestore لتأمين بياناتك في Cloud Firestore.
في ما يلي بعض مجموعات القواعد الأساسية التي يمكنك استخدامها للبدء. يمكنك تعديل قواعد الأمان في علامة التبويب القواعد في وحدة التحكّم.
المصادقة مطلوبة
// 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. يمكنك الاطّلاع على مستندات فحص التطبيقات.
إذا كنت تستخدم إحدى حزم تطوير البرامج (SDK) الخاصة بالخادم، استخدِم إدارة الهوية وإمكانية الوصول (IAM) لتأمين بياناتك في Cloud Firestore.
مشاهدة فيديو تعليمي
للحصول على إرشادات تفصيلية حول بدء استخدام مكتبات عملاء Cloud Firestore المتوافقة مع الأجهزة الجوّالة، شاهد أحد برامج الفيديو التعليمية التالية:
الويب
iOS+
Android
يمكنك العثور على المزيد من الفيديوهات في قناة Firebase على YouTube.
الخطوات اللاحقة
عزِّز معرفتك من خلال المواضيع التالية:
- دروس تطبيقية حول الترميز: تعرَّف على كيفية استخدام Cloud Firestore في تطبيق فعلي من خلال اتّباع الدرس التطبيقي حول الترميز لأجهزة Android أو iOS أو الويب.
- نموذج البيانات — تعرّف على مزيد من المعلومات حول كيفية تنظيم البيانات في Cloud Firestore، بما في ذلك البيانات الهرمية والمجموعات الفرعية.
- إضافة البيانات: مزيد من المعلومات حول إنشاء البيانات وتعديلها في Cloud Firestore
- الحصول على البيانات: تعرَّف على مزيد من المعلومات حول طريقة استرداد البيانات.
- تنفيذ طلبات بحث بسيطة ومركبة: يمكنك تعلُّم كيفية تنفيذ طلبات بحث بسيطة ومركبة.
- طلبات البحث عن الطلبات والحد من عمليّات الشراء: تعرَّف على كيفية ترتيب البيانات التي تعرضها استعلاماتك والحدّ منها.