ابدأ مع Cloud Firestore

يوضح لك هذا Quickstart كيفية إعداد Cloud Firestore وإضافة البيانات ثم عرض البيانات التي أضفتها للتو في وحدة تحكم Firebase.

أنشئ قاعدة بيانات Cloud Firestore

  1. إذا كنت لم تقم بذلك بالفعل، إنشاء مشروع Firebase: في وحدة التحكم Firebase ، انقر فوق المشروع إضافة، ثم اتبع التعليمات التي تظهر على الشاشة لإنشاء مشروع Firebase أو إضافة خدمات Firebase إلى مشروع GCP القائمة.

  2. انتقل إلى قسم سحابة Firestore من حدة Firebase . سيُطلب منك تحديد مشروع Firebase موجود. اتبع سير عمل إنشاء قاعدة البيانات.

  3. حدد وضع بدء لقواعد أمان Cloud Firestore:

    وضع الاختبار

    جيد لبدء استخدام مكتبات عميل الويب والجوال ، ولكنه يسمح لأي شخص بقراءة بياناتك والكتابة فوقها. بعد اختبار، تأكد من مراجعة تأمين البيانات الخاصة بك القسم.

    لبدء استخدام الويب أو iOS أو Android SDK ، حدد وضع الاختبار.

    وضع القفل

    يرفض كل ما يقرأ ويكتب من عملاء المحمول والويب. لا يزال بإمكان خوادم التطبيقات المصادق عليها (C # أو Go أو Java أو Node.js أو PHP أو Python أو Ruby) الوصول إلى قاعدة البيانات الخاصة بك.

    لبدء استخدام مكتبة عميل خادم C # أو Go أو Java أو Node.js أو PHP أو Python أو Ruby ، ​​حدد الوضع المقفل.

  4. تحديد موقع قاعدة البيانات الخاصة بك.

    • هذا الإعداد الموقع مشروعك جوجل سحابة منصة (GCP) موقع الموارد الافتراضية . علما بأن هذا الموقع سوف تستخدم لخدمات GCP في المشروع التي تتطلب إعداد الموقع، وعلى وجه التحديد، الافتراضي الخاص بك سحابة التخزين دلو والخاص محرك التطبيقات التطبيق (وهو مطلوب إذا كنت تستخدم الغيمة جدولة).

    • إذا لم تكن قادرًا على تحديد موقع ، فإن مشروعك يحتوي بالفعل على موقع موارد GCP افتراضي. تم تعيينه إما أثناء إنشاء المشروع أو عند إعداد خدمة أخرى تتطلب إعداد الموقع.

  5. انقر فوق تم.

عند تمكين الغيمة Firestore، فإنه يمكن أيضا API في مدير API الغيمة .

قم بإعداد بيئة التطوير الخاصة بك

أضف التبعيات ومكتبات العملاء المطلوبة إلى تطبيقك.

إصدار الويب 8

  1. اتبع الإرشادات ل إضافة Firebase إلى التطبيق ويب .
  2. إضافة مكتبات Firebase والغيمة Firestore إلى التطبيق الخاص بك:
    <script src="https://www.gstatic.com/firebasejs/9.0.2/firebase-app.js"></script>
    <script src="https://www.gstatic.com/firebasejs/9.0.2/firebase-firestore.js"></script>
    الغيمة Firestore SDK هو متاح في حزمة الآلية الوقائية الوطنية أيضا.
    npm install firebase@9.0.2 --save
    
    سوف تحتاج إلى تتطلب كلا Firebase والغيمة Firestore يدويا.
    const firebase = require("firebase");
    // Required for side-effects
    require("firebase/firestore");
    

إصدار الويب 9

  1. اتبع الإرشادات ل إضافة Firebase إلى التطبيق ويب .
  2. يتوفر Cloud Firestore SDK كحزمة npm.
    npm install firebase@9.0.2 --save
    
    سوف تحتاج إلى استيراد كل من Firebase والغيمة Firestore.
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
    
iOS
  1. اتبع الإرشادات ل إضافة Firebase لتطبيقات نظام التشغيل iOS الخاص بك .
  2. إضافة جراب سحابة Firestore لديك Podfile
    pod 'Firebase/Firestore'
    
    # Optionally, include the Swift extensions if you're using Swift.
    pod 'FirebaseFirestoreSwift'
    
  3. حفظ الملف وتشغيل pod install .

جافا

  1. اتبع الإرشادات ل إضافة Firebase لتطبيق Android .
  2. باستخدام Firebase الروبوت بوم ، أن يعلن تبعية المكتبة سحابة Firestore الروبوت في الوحدة النمطية الخاصة بك (على مستوى التطبيق) ملف Gradle (عادة app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.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'
    }
    

    باستخدام Firebase الروبوت بوم ، والتطبيق دائما استخدام إصدارات متوافقة من المكتبات Firebase الروبوت.

    (البديل) إعلان Firebase تبعيات مكتبة دون استخدام BOM

    إذا اخترت عدم استخدام Firebase BoM ، فيجب عليك تحديد كل إصدار من إصدارات مكتبة Firebase في سطر التبعية الخاص بها.

    ملاحظة أنه إذا كنت تستخدم مكتبات Firebase متعددة في التطبيق الخاص بك، ونحن نوصي بشدة باستخدام بوم لإدارة إصدارات المكتبة، والذي يضمن أن جميع إصدارات متوافقة.

    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:23.0.3'
    }
    

Kotlin + KTX

  1. اتبع الإرشادات ل إضافة Firebase لتطبيق Android .
  2. باستخدام Firebase الروبوت بوم ، أن يعلن تبعية المكتبة سحابة Firestore الروبوت في الوحدة النمطية الخاصة بك (على مستوى التطبيق) ملف Gradle (عادة app/build.gradle ).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.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-ktx'
    }
    

    باستخدام Firebase الروبوت بوم ، والتطبيق دائما استخدام إصدارات متوافقة من المكتبات Firebase الروبوت.

    (البديل) إعلان Firebase تبعيات مكتبة دون استخدام BOM

    إذا اخترت عدم استخدام Firebase BoM ، فيجب عليك تحديد كل إصدار من إصدارات مكتبة Firebase في سطر التبعية الخاص بها.

    ملاحظة أنه إذا كنت تستخدم مكتبات Firebase متعددة في التطبيق الخاص بك، ونحن نوصي بشدة باستخدام بوم لإدارة إصدارات المكتبة، والذي يضمن أن جميع إصدارات متوافقة.

    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:23.0.3'
    }
    
جافا
  1. أضف Firebase Admin SDK إلى تطبيقك:
    • باستخدام Gradle:
      compile 'com.google.firebase:firebase-admin:8.0.1'
      
    • باستخدام مخضرم:
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>8.0.1</version>
      </dependency>
           
  2. اتبع الإرشادات أدناه لتهيئة Cloud Firestore باستخدام بيانات الاعتماد المناسبة في بيئتك.
بايثون
  1. إضافة Firebase الادارية SDK لبرنامج بيثون الخاص بك:
    pip install --upgrade firebase-admin
  2. اتبع الإرشادات أدناه لتهيئة Cloud Firestore باستخدام بيانات الاعتماد المناسبة في بيئتك.
C ++
  1. اتبع الإرشادات ل إضافة Firebase لمشروعك C ++ .
  2. واجهة 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}")
              
  3. لإعداد التكامل سطح المكتب، انظر اضافة Firebase لمشروعك C ++ .
وحدة
  1. اتبع الإرشادات ل إضافة Firebase لمشروع الوحدة الخاصة بك .
  2. واجهة الوحدة لنظام Android.
  3. عند الإنشاء لنظام Android ، قم بتمكين ProGuarding لتجنب حد Android DEX. للقيام بذلك ، في محرر الوحدة:

    1. حدد ملف> إعدادات البناء
    2. بدّل "المنصة" إلى "أندرويد" وانقر على "تبديل النظام الأساسي"
    3. انقر فوق "إعدادات المشغل ..."
    4. في واجهة مستخدم الوحدة الرئيسية ، ضمن "إعدادات Android" ، حدد "إعدادات النشر"
    5. ضمن قسم "تصغير" ، قم بتغيير إعدادات الإصدار وتصحيح الأخطاء من "بلا" إلى "ProGuard"
Node.js
  1. إضافة Firebase الادارية SDK إلى التطبيق الخاص بك:
    npm install firebase-admin --save
  2. اتبع الإرشادات أدناه لتهيئة Cloud Firestore باستخدام بيانات الاعتماد المناسبة في بيئتك.
يذهب
  1. إضافة Firebase الادارية SDK لبرنامج العودة الخاص بك:
    go get firebase.google.com/go
    
  2. اتبع الإرشادات أدناه لتهيئة Cloud Firestore باستخدام بيانات الاعتماد المناسبة في بيئتك.
بي أتش بي
  1. المكتبات سحابة Firestore عميل ملقم (جافا، نود.جي إس، بيثون، العودة، PHP، C #، وروبي) استخدام تطبيق جوجل افتراضي ثائق التفويض للمصادقة.
    • لمصادقة من بيئة التطوير الخاصة بك، تعيين GOOGLE_APPLICATION_CREDENTIALS متغير البيئة للإشارة إلى ملف مفتاح حساب خدمة JSON. يمكنك إنشاء ملف مفتاح على الصفحة وثائق التفويض وحدة التحكم API .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • في بيئة الإنتاج الخاصة بك ، لا تحتاج إلى المصادقة إذا قمت بتشغيل تطبيقك على App Engine أو Compute Engine ، باستخدام نفس المشروع الذي تستخدمه لـ Cloud Firestore. خلاف ذلك، إعداد حساب الخدمة .
  2. تثبيت وتمكين تمديد gRPC لPHP، والتي سوف تحتاج إلى استخدام المكتبة العميل.
  3. إضافة مكتبة سحابة Firestore PHP إلى التطبيق الخاص بك:
    composer require google/cloud-firestore
سي #
  1. المكتبات سحابة Firestore عميل ملقم (جافا، نود.جي إس، بيثون، العودة، PHP، C #، وروبي) استخدام تطبيق جوجل افتراضي ثائق التفويض للمصادقة.
    • لمصادقة من بيئة التطوير الخاصة بك، تعيين GOOGLE_APPLICATION_CREDENTIALS متغير البيئة للإشارة إلى ملف مفتاح حساب خدمة JSON. يمكنك إنشاء ملف مفتاح على الصفحة وثائق التفويض وحدة التحكم API .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • في بيئة الإنتاج الخاصة بك ، لا تحتاج إلى المصادقة إذا قمت بتشغيل تطبيقك على App Engine أو Compute Engine ، باستخدام نفس المشروع الذي تستخدمه لـ Cloud Firestore. خلاف ذلك، إعداد حساب الخدمة .
  2. إضافة # مكتبة سحابة Firestore C إلى التطبيق الخاص بك في .csproj ملف:
    <ItemGroup>
      <PackageReference Include="Google.Cloud.Firestore" Version="1.1.0-beta01" />
    </ItemGroup>
  3. إضافة ما يلي إلى حسابك Program.cs ملف:
    using Google.Cloud.Firestore;
روبي
  1. المكتبات سحابة Firestore عميل ملقم (جافا، نود.جي إس، بيثون، العودة، PHP، C #، وروبي) استخدام تطبيق جوجل افتراضي ثائق التفويض للمصادقة.
    • لمصادقة من بيئة التطوير الخاصة بك، تعيين GOOGLE_APPLICATION_CREDENTIALS متغير البيئة للإشارة إلى ملف مفتاح حساب خدمة JSON. يمكنك إنشاء ملف مفتاح على الصفحة وثائق التفويض وحدة التحكم API .
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • في بيئة الإنتاج الخاصة بك ، لا تحتاج إلى المصادقة إذا قمت بتشغيل تطبيقك على App Engine أو Compute Engine ، باستخدام نفس المشروع الذي تستخدمه لـ Cloud Firestore. خلاف ذلك، إعداد حساب الخدمة .
  2. إضافة مكتبة سحابة Firestore روبي إلى التطبيق الخاص بك في Gemfile :
    gem "google-cloud-firestore"
  3. تثبيت تبعيات من هاتفك Gemfile باستخدام:
    bundle install

(اختياري) النموذج الأولي والاختبار باستخدام Firebase Local Emulator Suite

لمطوري الأجهزة المحمولة ، قبل التحدث عن كيفية كتابة تطبيقك للقراءة من Cloud Firestore ، دعنا نقدم مجموعة من الأدوات التي يمكنك استخدامها لتصميم واختبار وظائف Cloud Firestore: Firebase Local Emulator Suite. إذا كنت تجرب نماذج بيانات مختلفة ، أو تقوم بتحسين قواعد الأمان الخاصة بك ، أو تعمل على إيجاد الطريقة الأكثر فعالية من حيث التكلفة للتفاعل مع النهاية الخلفية ، فإن القدرة على العمل محليًا دون نشر الخدمات المباشرة يمكن أن تكون فكرة رائعة.

يعد محاكي Cloud Firestore جزءًا من Local Emulator Suite ، والذي يمكّن تطبيقك من التفاعل مع محتوى قاعدة البيانات التي تمت محاكاتها وتكوينها ، بالإضافة إلى موارد المشروع التي تمت محاكاتها اختياريًا (الوظائف وقواعد البيانات الأخرى وقواعد الأمان).

يتضمن استخدام محاكي Cloud Firestore بضع خطوات فقط:

  1. إضافة سطر من التعليمات البرمجية إلى التكوين التجريبي لتطبيقك للاتصال بالمحاكي.
  2. من جذر دليل المشروع الخاص المحلي، وتشغيل firebase emulators:start .
  3. إجراء مكالمات من رمز النموذج الأولي للتطبيق باستخدام SDK للنظام الأساسي Cloud Firestore كالمعتاد.

A مفصل تجول تنطوي على الغيمة Firestore والغيمة وظائف متوفرة. يجب أيضا أن يكون لها نظرة على المحاكي جناح المحلية مقدمة .

تهيئة Cloud Firestore

تهيئة مثيل Cloud Firestore:

إصدار الويب 8

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

var db = firebase.firestore();
القيم ل`initializeApp` يمكن العثور عليها في تطبيق ويب الخاص بك ` firebaseConfig` . أن تستمر البيانات عندما يفقد الجهاز اتصاله، راجع تمكين بيانات غير متصل الوثائق.

إصدار الويب 9

// Initialize Cloud 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();
القيم ل`initializeApp` يمكن العثور عليها في تطبيق ويب الخاص بك ` firebaseConfig` . أن تستمر البيانات عندما يفقد الجهاز اتصاله، راجع تمكين بيانات غير متصل الوثائق.
سويفت
import Firebase
FirebaseApp.configure()

let db = Firestore.firestore()
ج موضوعية
@import Firebase;

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

جافا

// 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
جافا
تتم تهيئة Cloud Firestore SDK بطرق مختلفة اعتمادًا على بيئتك. فيما يلي الطرق الأكثر شيوعًا. للإشارة كاملة، انظر تهيئة 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();
    
  • التهيئة على الخادم الخاص بك

    استخدام Firebase الادارية SDK على الخادم الخاص بك، واستخدام حساب خدمة .

    الذهاب إلى IAM والمشرف> حسابات خدمة في وحدة النظام الأساسي للسحاب. أنشئ مفتاحًا خاصًا جديدًا واحفظ ملف 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();
    
  • بايثون
    تتم تهيئة Cloud Firestore SDK بطرق مختلفة اعتمادًا على بيئتك. فيما يلي الطرق الأكثر شيوعًا. للإشارة كاملة، انظر تهيئة 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, {
      'projectId': project_id,
    })
    
    db = firestore.client()
    
  • التهيئة على الخادم الخاص بك

    استخدام Firebase الادارية SDK على الخادم الخاص بك، واستخدام حساب خدمة .

    الذهاب إلى IAM والمشرف> حسابات خدمة في وحدة النظام الأساسي للسحاب. أنشئ مفتاحًا خاصًا جديدًا واحفظ ملف 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')
    firebase_admin.initialize_app(cred)
    
    db = firestore.client()
    
  • بايثون

    تتم تهيئة Cloud Firestore SDK بطرق مختلفة اعتمادًا على بيئتك. فيما يلي الطرق الأكثر شيوعًا. للإشارة كاملة، انظر تهيئة 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, {
      'projectId': project_id,
    })
    
    db = firestore.AsyncClient()
    
  • التهيئة على الخادم الخاص بك

    استخدام Firebase الادارية SDK على الخادم الخاص بك، واستخدام حساب خدمة .

    الذهاب إلى IAM والمشرف> حسابات خدمة في وحدة النظام الأساسي للسحاب. أنشئ مفتاحًا خاصًا جديدًا واحفظ ملف 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')
    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
    تتم تهيئة Cloud Firestore SDK بطرق مختلفة اعتمادًا على بيئتك. فيما يلي الطرق الأكثر شيوعًا. للإشارة كاملة، انظر تهيئة SDK الادارية .
    • تهيئة على وظائف سحابة
      const admin = require('firebase-admin');
      admin.initializeApp();
      
      const db = admin.firestore();
      
    • تهيئة على جوجل سحابة منصة
      const admin = require('firebase-admin');
      admin.initializeApp({
        credential: admin.credential.applicationDefault()
      });
      
      const db = admin.firestore();
    • التهيئة على الخادم الخاص بك

      استخدام Firebase الادارية SDK على الخادم الخاص بك (أو أي بيئة أخرى نود.جي إس)، واستخدام حساب خدمة . الذهاب إلى IAM والمشرف> حسابات خدمة في وحدة النظام الأساسي للسحاب. أنشئ مفتاحًا خاصًا جديدًا واحفظ ملف JSON. ثم استخدم الملف لتهيئة SDK:

      const admin = require('firebase-admin');
      const serviceAccount = require('./path/to/serviceAccountKey.json');
      
      admin.initializeApp({
        credential: admin.credential.cert(serviceAccount)
      });
      
      const db = admin.firestore();
      
    يذهب
    تتم تهيئة Cloud Firestore SDK بطرق مختلفة اعتمادًا على بيئتك. فيما يلي الطرق الأكثر شيوعًا. للإشارة كاملة، انظر تهيئة 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()
    
  • التهيئة على الخادم الخاص بك

    استخدام Firebase الادارية SDK على الخادم الخاص بك، واستخدام حساب خدمة .

    الذهاب إلى IAM والمشرف> حسابات خدمة في وحدة النظام الأساسي للسحاب. أنشئ مفتاحًا خاصًا جديدًا واحفظ ملف 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()
    
  • بي أتش بي
    use Google\Cloud\Firestore\FirestoreClient;
    
    /**
     * Initialize Cloud Firestore with default project ID.
     */
    function setup_client_create()
    {
        // Create the Cloud Firestore client
        $db = new FirestoreClient();
        printf('Created Cloud Firestore client with default project ID.' . PHP_EOL);
    }
    وحدة
    using Firebase.Firestore;
    using Firebase.Extensions;
    FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
    سي #
    FirestoreDb db = FirestoreDb.Create(project);
    Console.WriteLine("Created Cloud Firestore client with project ID: {0}", project);
    روبي
    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."

    إضافة البيانات

    يقوم Cloud Firestore بتخزين البيانات في المستندات ، والتي يتم تخزينها في المجموعات. ينشئ Cloud Firestore مجموعات ووثائق ضمنيًا في المرة الأولى التي تضيف فيها البيانات إلى المستند. لا تحتاج إلى إنشاء مجموعات أو مستندات بشكل صريح.

    قم بإنشاء مجموعة جديدة ومستند باستخدام رمز المثال التالي.

    إصدار الويب 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);
    }

    إصدار الويب 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);
    });
    سويفت
    // 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)")
        }
    }
    ج موضوعية
    // 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);
          }
        }];

    جافا

    // 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)
        }
    جافا
    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());
    بايثون
    doc_ref = db.collection(u'users').document(u'alovelace')
    doc_ref.set({
        u'first': u'Ada',
        u'last': u'Lovelace',
        u'born': 1815
    })

    بايثون

    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()
                  << '\n';
      } else {
        std::cout << "Error adding document: " << future.error_message() << '\n';
      }
    });
    Node.js
    const docRef = db.collection('users').doc('alovelace');
    
    await docRef.set({
      first: 'Ada',
      last: 'Lovelace',
      born: 1815
    });
    يذهب
    _, _, 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)
    }
    بي أتش بي
    $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);
    وحدة
    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.");
    });
    سي #
    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);
    روبي
    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."

    الآن إضافة وثيقة أخرى إلى users المجموعة. لاحظ أن هذا المستند يتضمن زوجًا من قيم المفاتيح (الاسم الأوسط) لا يظهر في المستند الأول. يمكن أن تحتوي المستندات الموجودة في مجموعة على مجموعات مختلفة من المعلومات.

    إصدار الويب 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);
    }

    إصدار الويب 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);
    });
    سويفت
    // 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)")
        }
    }
    ج موضوعية
    // 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);
          }
        }];

    جافا

    // 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)
        }
    جافا
    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());
    بايثون
    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
    })

    بايثون

    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() << '\n';
          } else {
            std::cout << "Error adding document: " << future.error_message()
                      << '\n';
          }
        });
    Node.js
    const aTuringRef = db.collection('users').doc('aturing');
    
    await aTuringRef.set({
      'first': 'Alan',
      'middle': 'Mathison',
      'last': 'Turing',
      'born': 1912
    });
    يذهب
    _, _, 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)
    }
    بي أتش بي
    $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);
    وحدة
    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.");
    });
    سي #
    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);
    روبي
    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."

    إقرأ البيانات

    بسرعة التحقق من أنك قمت بإضافة البيانات إلى سحابة Firestore، استخدام عارض البيانات في وحدة التحكم Firebase .

    يمكنك أيضًا استخدام طريقة "get" لاسترداد المجموعة بأكملها.

    إصدار الويب 9

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

    إصدار الويب 8

    db.collection("users").get().then((querySnapshot) => {
        querySnapshot.forEach((doc) => {
            console.log(`${doc.id} => ${doc.data()}`);
        });
    });
    سويفت
    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())")
            }
        }
    }
    ج موضوعية
    [[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);
            }
          }
        }];

    جافا

    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)
            }
    جافا
    // 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"));
    }
    بايثون
    users_ref = db.collection(u'users')
    docs = users_ref.stream()
    
    for doc in docs:
        print(f'{doc.id} => {doc.to_dict()}')

    بايثون

    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 << '\n';
        }
      } else {
        std::cout << "Error getting documents: " << future.error_message()
                  << '\n';
      }
    });
    Node.js
    const snapshot = await db.collection('users').get();
    snapshot.forEach((doc) => {
      console.log(doc.id, '=>', doc.data());
    });
    يذهب
    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())
    }
    بي أتش بي
    $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);
    وحدة
    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.");
    });
    سي #
    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();
    }
    روبي
    users_ref = firestore.col collection_path
    users_ref.get do |user|
      puts "#{user.document_id} data: #{user.data}."
    end

    تأمين البيانات الخاصة بك

    إذا كنت تستخدم شبكة الإنترنت، الروبوت، أو دائرة الرقابة الداخلية SDK، واستخدام مصادقة Firebase و الكلمة الدلالية ضوابط الأمن Firestore لتأمين البيانات الخاصة بك في سحابة Firestore.

    فيما يلي بعض مجموعات القواعد الأساسية التي يمكنك استخدامها للبدء. يمكنك تعديل قواعد الأمان في التبويب قواعد من وحدة التحكم.

    المصادقة مطلوبة

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

    وضع القفل

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

    وضع الاختبار

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

    إذا كنت تستخدم واحدة من عدد تطوير البرامج الخادم، واستخدام إدارة الهوية والوصول (IAM) لتأمين البيانات الخاصة بك في سحابة Firestore.

    شاهد فيديو تعليمي

    للحصول على إرشادات مفصلة حول بدء استخدام مكتبات عملاء الأجهزة المحمولة في Cloud Firestore ، شاهد أحد مقاطع الفيديو التعليمية التالية:

    iOS
    ذكري المظهر

    يمكنك العثور على مزيد من أشرطة الفيديو في Firebase قناة يوتيوب .

    الخطوات التالية

    تعميق معرفتك بالمواضيع التالية: