Bắt đầu sử dụng Cloud Firestore

Hướng dẫn bắt đầu nhanh này hướng dẫn bạn cách thiết lập Cloud Firestore, thêm dữ liệu rồi xem dữ liệu mà bạn vừa thêm vào bảng điều khiển của Firebase.

Tạo cơ sở dữ liệu Cloud Firestore

  1. Nếu bạn chưa tạo, hãy tạo một dự án Firebase: Trong Bảng điều khiển của Firebase, hãy nhấp vào Thêm dự án, rồi làm theo hướng dẫn trên màn hình để tạo dự án Firebase hoặc thêm các dịch vụ Firebase vào một dự án GCP hiện có.

  2. Chuyển đến phần Cloud Firestore của Bảng điều khiển của Firebase. Bạn sẽ được nhắc chọn một dự án Firebase hiện có. Làm theo quy trình tạo cơ sở dữ liệu.

  3. Chọn chế độ bắt đầu cho Quy tắc bảo mật của Cloud Firestore:

    Chế độ thử nghiệm

    Phù hợp để bắt đầu sử dụng thư viện ứng dụng khách trên web và trên điện thoại di động, nhưng cho phép mọi người đọc và ghi đè dữ liệu của bạn. Sau khi thử nghiệm, hãy thực hiện hãy nhớ xem phần Bảo mật dữ liệu của bạn.

    Để bắt đầu sử dụng web, nền tảng của Apple hoặc SDK Android, hãy chọn chế độ thử nghiệm.

    Chế độ khoá

    Từ chối mọi lượt đọc và ghi từ ứng dụng di động và web. Máy chủ ứng dụng đã xác thực của bạn (C#, Go, Java, Node.js, PHP, Python hoặc Ruby) vẫn có thể truy cập cơ sở dữ liệu của bạn.

    Để bắt đầu với C#, Go, Java, Node.js, PHP, Python hoặc Ruby thư viện ứng dụng của máy chủ, chọn chế độ khoá.

    Bộ Quy tắc bảo mật trên Cloud Firestore ban đầu sẽ áp dụng cho chế độ mặc định của bạn Cơ sở dữ liệu Cloud Firestore. Nếu bạn tạo nhiều cơ sở dữ liệu cho dự án của mình, bạn có thể triển khai Quy tắc bảo mật Cloud Firestore cho từng cơ sở dữ liệu.

  4. Chọn một vị trí cho cơ sở dữ liệu của bạn.

    • Chế độ cài đặt vị trí này là chế độ cài đặt của dự án vị trí tài nguyên mặc định của Google Cloud Platform (GCP). Lưu ý rằng vị trí này sẽ được dùng cho các dịch vụ GCP trong dự án của bạn yêu cầu cài đặt vị trí, cụ thể là chế độ cài đặt mặc định Bộ chứa Cloud Storage và Ứng dụng App Engine (tức là nếu bạn sử dụng Cloud Scheduler).

    • Nếu bạn không thể chọn vị trí, thì tức là dự án của bạn đã có vị trí tài nguyên GCP mặc định. Giá trị này được đặt trong dự án hoặc khi thiết lập một dịch vụ khác yêu cầu cung cấp vị trí cài đặt.

  5. Nhấp vào Xong.

Khi bạn bật Cloud Firestore, bạn cũng sẽ bật API trong Trình quản lý API Cloud.

Thiết lập môi trường phát triển

Thêm các phần phụ thuộc và thư viện ứng dụng cần thiết vào ứng dụng của bạn.

Web

  1. Làm theo hướng dẫn để thêm Firebase vào ứng dụng web.
  2. Thêm thư viện Firebase và Cloud Firestore vào ứng dụng của bạn:
    <script src="https://www.gstatic.com/firebasejs/10.12.3/firebase-app-compat.js"></script>
    <script src="https://www.gstatic.com/firebasejs/10.12.3/firebase-firestore-compat.js"></script>
    Cloud Firestore SDK cũng được cung cấp dưới dạng gói npm.
    npm install firebase@10.12.3 --save
    
    Bạn sẽ phải yêu cầu cả Firebase và Cloud Firestore theo cách thủ công.
    import firebase from "firebase/compat/app";
    // Required for side-effects
    import "firebase/firestore";
    

Web

  1. Làm theo hướng dẫn để thêm Firebase vào ứng dụng web.
  2. Cloud Firestore SDK được cung cấp dưới dạng gói npm.
    npm install firebase@10.12.3 --save
    
    Bạn sẽ cần nhập cả Firebase và Cloud Firestore.
    import { initializeApp } from "firebase/app";
    import { getFirestore } from "firebase/firestore";
    
iOS trở lên

Làm theo hướng dẫn để thêm Firebase vào ứng dụng Apple của bạn.

Sử dụng Trình quản lý gói Swift để cài đặt và quản lý các phần phụ thuộc Firebase.

  1. Trong Xcode, khi dự án ứng dụng của bạn đang mở, hãy chuyển đến Tệp > Gói Swift > Thêm phần phụ thuộc của gói.
  2. Khi được nhắc, hãy thêm kho lưu trữ SDK nền tảng Apple của Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. Chọn thư viện Firestore.
  5. Khi hoàn tất, Xcode sẽ tự động bắt đầu phân giải và tải xuống các phần phụ thuộc trong nền.
Android
  1. Làm theo hướng dẫn để thêm Firebase vào ứng dụng Android.
  2. Sử dụng Firebase Android BoM khai báo phần phụ thuộc cho thư viện Cloud Firestore dành cho Android trong tệp Gradle mô-đun (cấp ứng dụng) của bạn (thường là app/build.gradle.kts hoặc app/build.gradle).
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.1.2"))
    
        // 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")
    }
    

    Bằng cách sử dụng Firebase Android BoM ứng dụng của bạn sẽ luôn sử dụng các phiên bản tương thích của Firebase Android thư viện.

    (Phương án thay thế) Khai báo các phần phụ thuộc của thư viện Firebase mà không cần sử dụng BoM

    Nếu chọn không sử dụng BoM của Firebase, bạn phải chỉ định từng Phiên bản của thư viện Firebase trong dòng phần phụ thuộc.

    Lưu ý rằng nếu bạn sử dụng nhiều thư viện Firebase trong ứng dụng của mình, bạn nên dùng BoM để quản lý thư viện để đảm bảo tất cả các phiên bản đều tương thích.

    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")
    }
    

    Bạn đang tìm một mô-đun thư viện dành riêng cho Kotlin? Bắt đầu bằng Bản phát hành tháng 10 năm 2023, cả nhà phát triển Kotlin và Java đều có thể phụ thuộc vào mô-đun thư viện chính (để biết chi tiết, hãy xem Câu hỏi thường gặp về sáng kiến này).

Dart

  1. Nếu bạn chưa thiết lập, hãy định cấu hình và khởi chạy Firebase trong ứng dụng Flutter.
  2. Từ thư mục gốc của dự án Flutter, hãy chạy lệnh sau để cài đặt trình bổ trợ:
    flutter pub add cloud_firestore
  3. Sau khi hoàn tất, hãy tạo lại ứng dụng Flutter:
    flutter run
  4. Không bắt buộc: Cải thiện iOS và Thời gian xây dựng macOS bằng cách đưa ra khung được biên dịch trước.

    Hiện tại, SDK Firestore dành cho iOS phụ thuộc vào mã có thể mất lên 5 phút để xây dựng trong Xcode. Để giảm thời gian xây dựng đáng kể, bạn có thể sử dụng phiên bản được biên dịch trước bằng cách thêm dòng này vào khối target 'Runner' do trong Podfile của bạn:

    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

    Thay thế IOS_SDK_VERSION bằng phiên bản Firebase cho iOS SDK được chỉ định trong firebase_core firebase_sdk_version.rb . Nếu bạn không sử dụng phiên bản mới nhất của firebase_core, hãy tìm tệp này trong gói Pub cục bộ của bạn bộ nhớ đệm (thường là ~/.pub-cache).

    Ngoài ra, hãy đảm bảo rằng bạn đã nâng cấp CocoaPods lên 1.9.1 hoặc cao hơn:

    gem install cocoapods

    Để biết thêm thông tin, hãy xem vấn đề trên GitHub.

Java
  1. Thêm SDK quản trị của Firebase vào ứng dụng:
    • Sử dụng Gradle:
      compile 'com.google.firebase:firebase-admin:1.32.0'
      
    • Sử dụng Maven:
      <dependency>
        <groupId>com.google.firebase</groupId>
        <artifactId>firebase-admin</artifactId>
        <version>1.32.0</version>
      </dependency>
           
  2. Hãy làm theo hướng dẫn bên dưới để khởi chạy Cloud Firestore bằng thông tin đăng nhập phù hợp trong môi trường của bạn.
Python
  1. Thêm SDK quản trị của Firebase vào ứng dụng Python:
    pip install --upgrade firebase-admin
  2. Hãy làm theo hướng dẫn bên dưới để khởi chạy Cloud Firestore bằng thông tin đăng nhập phù hợp trong môi trường của bạn.
C++
  1. Làm theo hướng dẫn để thêm Firebase vào dự án C++ của bạn.
  2. Giao diện C++ dành cho Android.
    • Các phần phụ thuộc Gradle. Thêm mã sau vào mô-đun của bạn Tệp Gradle (cấp ứng dụng) (thường là 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
              }
              
    • Phần phụ thuộc nhị phân. Tương tự, cách được đề xuất để có được phần phụ thuộc nhị phân là thêm đoạn mã sau vào CMakeLists.txt tệp:
              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. Để thiết lập tính năng tích hợp với máy tính, hãy xem bài viết Thêm Firebase vào dự án C++.
Unity
  1. Làm theo hướng dẫn để thêm Firebase vào Unity dự án.
  2. Sử dụng giao diện Unity để định cấu hình dự án nhằm giảm kích thước các bản dựng Android.
  3. Bạn phải giảm kích thước bản dựng để tránh thông báo Error while merging dex archives.

    • Bạn có thể tìm thấy tuỳ chọn này trong phần Cài đặt trình phát > Android > Đang xuất bản Cài đặt > Giảm kích thước.
    • Các tuỳ chọn có thể khác nhau trong các phiên bản Unity khác nhau, vì vậy hãy tham khảo tài liệu Unity chính thức và Hướng dẫn gỡ lỗi bản dựng Unity của Firebase.
    • Nếu sau khi bật tính năng giảm kích thước, số lượng phương thức được tham chiếu vẫn vượt quá giới hạn, bạn có thể bật một tuỳ chọn khác để bật multidex trong:
      • mainTemplate.gradle nếu Mẫu Gradle tuỳ chỉnh trong phần Player Settings (Cài đặt trình phát) đang bật
      • hoặc tệp build.gradle ở cấp mô-đun, nếu bạn sử dụng Android Studio để tạo dự án đã xuất.
Node.js
  1. Thêm SDK quản trị của Firebase vào ứng dụng:
    npm install firebase-admin --save
  2. Hãy làm theo hướng dẫn bên dưới để khởi chạy Cloud Firestore bằng thông tin đăng nhập phù hợp trong môi trường của bạn.
Tiến hành
  1. Thêm SDK Quản trị của Firebase vào ứng dụng Go:
    go get firebase.google.com/go
    
  2. Hãy làm theo hướng dẫn bên dưới để khởi chạy Cloud Firestore bằng thông tin đăng nhập phù hợp trong môi trường của bạn.
PHP
  1. Các thư viện ứng dụng của máy chủ Cloud Firestore (Java, Node.js, Python, Go, PHP, C# và Ruby) sử dụng Thông tin đăng nhập mặc định của ứng dụng trên Google để xác thực.
    • Để xác thực từ môi trường phát triển của bạn, hãy đặt GOOGLE_APPLICATION_CREDENTIALS biến môi trường để trỏ đến tệp khoá tài khoản dịch vụ JSON. Bạn có thể tạo một tệp khoá trên trang Thông tin đăng nhập Bảng điều khiển API.
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Trong môi trường phát hành chính thức, bạn không cần xác thực nếu chạy ứng dụng trên App Engine hoặc Compute Engine, bằng cách sử dụng cùng một dự án mà bạn dùng cho Cloud Firestore. Nếu không, thiết lập tài khoản dịch vụ.
  2. Cài đặt và bật tiện ích gRPC cho PHP mà bạn sẽ cần sử dụng thư viện ứng dụng.
  3. Thêm thư viện PHP Cloud Firestore vào ứng dụng của bạn:
    composer require google/cloud-firestore
C#
  1. Các thư viện ứng dụng của máy chủ Cloud Firestore (Java, Node.js, Python, Go, PHP, C# và Ruby) sử dụng Thông tin đăng nhập mặc định của ứng dụng trên Google để xác thực.
    • Để xác thực từ môi trường phát triển của bạn, hãy đặt GOOGLE_APPLICATION_CREDENTIALS biến môi trường để trỏ đến tệp khoá tài khoản dịch vụ JSON. Bạn có thể tạo một tệp khoá trên trang Thông tin đăng nhập Bảng điều khiển API.
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Trong môi trường phát hành chính thức, bạn không cần xác thực nếu chạy ứng dụng trên App Engine hoặc Compute Engine, bằng cách sử dụng cùng một dự án mà bạn dùng cho Cloud Firestore. Nếu không, thiết lập tài khoản dịch vụ.
  2. Thêm thư viện Cloud Firestore C# vào ứng dụng của bạn trong tệp .csproj:
    <ItemGroup>
      <PackageReference Include="Google.Cloud.Firestore" Version="1.1.0-beta01" />
    </ItemGroup>
  3. Thêm phần sau vào tệp Program.cs:
    using Google.Cloud.Firestore;
Ruby
  1. Các thư viện ứng dụng của máy chủ Cloud Firestore (Java, Node.js, Python, Go, PHP, C# và Ruby) sử dụng Thông tin đăng nhập mặc định của ứng dụng trên Google để xác thực.
    • Để xác thực từ môi trường phát triển của bạn, hãy đặt GOOGLE_APPLICATION_CREDENTIALS biến môi trường để trỏ đến tệp khoá tài khoản dịch vụ JSON. Bạn có thể tạo một tệp khoá trên trang Thông tin đăng nhập Bảng điều khiển API.
      export GOOGLE_APPLICATION_CREDENTIALS="path/to/your/keyfile.json"
    • Trong môi trường phát hành chính thức, bạn không cần xác thực nếu chạy ứng dụng trên App Engine hoặc Compute Engine, bằng cách sử dụng cùng một dự án mà bạn dùng cho Cloud Firestore. Nếu không, thiết lập tài khoản dịch vụ.
  2. Thêm thư viện Cloud Firestore Ruby vào ứng dụng của bạn trong Gemfile:
    gem "google-cloud-firestore"
  3. Cài đặt các phần phụ thuộc từ Gemfile bằng cách sử dụng:
    bundle install

(Không bắt buộc) Tạo nguyên mẫu và thử nghiệm bằng Bộ mô phỏng cục bộ của Firebase

Đối với nhà phát triển thiết bị di động, trước khi nói về cách ứng dụng ghi và đọc dữ liệu từ Cloud Firestore, hãy giới thiệu một bộ công cụ mà bạn có thể sử dụng để nguyên mẫu và thử nghiệm chức năng của Cloud Firestore: Bộ mô phỏng cục bộ của Firebase. Nếu bạn đang thử các mô hình dữ liệu khác nhau, tối ưu hoá các quy tắc bảo mật hoặc tìm cách tiết kiệm chi phí nhất để tương tác với chương trình phụ trợ, có thể làm việc cục bộ mà không cần triển khai dịch vụ trực tiếp có thể là một ý tưởng hay.

Trình mô phỏng Cloud Firestore là một phần của Bộ mô phỏng cục bộ, cho phép ứng dụng của bạn tương tác với cấu hình và nội dung cơ sở dữ liệu được mô phỏng, như cũng như các tài nguyên dự án được mô phỏng (không bắt buộc) (các hàm, cơ sở dữ liệu khác, và quy tắc bảo mật).

Việc sử dụng trình mô phỏng Cloud Firestore chỉ gồm một vài bước:

  1. Thêm một dòng mã vào cấu hình kiểm thử của ứng dụng để kết nối với trình mô phỏng.
  2. Trên gốc của thư mục dự án cục bộ, chạy firebase emulators:start.
  3. Gọi điện từ mã nguyên mẫu của ứng dụng bằng nền tảng Cloud Firestore SDK như thường lệ.

Bạn có thể tham khảo hướng dẫn chi tiết liên quan đến Cloud Firestore và Cloud Functions. Bạn cũng nên xem Giới thiệu về Bộ công cụ mô phỏng cục bộ.

Chạy Cloud Firestore

Khởi chạy một thực thể của 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);


// Initialize Cloud Firestore and get a reference to the service
const db = getFirestore(app);

Thay thế FIREBASE_CONFIGURATION bằng firebaseConfig.

Để lưu trữ dữ liệu khi thiết bị mất kết nối, hãy xem tài liệu Bật dữ liệu ngoại tuyến.

Web

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();

Thay thế FIREBASE_CONFIGURATION bằng firebaseConfig.

Để lưu trữ dữ liệu khi thiết bị mất kết nối, hãy xem tài liệu Bật dữ liệu ngoại tuyến.

Swift
Lưu ý: Sản phẩm này không hoạt động trên các mục tiêu watchOS và App Clip.
import FirebaseCore
import FirebaseFirestore
FirebaseApp.configure()

let db = Firestore.firestore()
Đối tượng C
Lưu ý: Sản phẩm này không hoạt động trên các mục tiêu watchOS và App Clip.
@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
Cloud Firestore SDK được khởi chạy theo nhiều cách, tuỳ thuộc vào môi trường của bạn. Dưới đây là những phương pháp phổ biến nhất. Để tham khảo đầy đủ, xem Khởi chạy SDK dành cho quản trị viên.
  • Khởi chạy trên Google Cloud
    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();
    
  • Khởi động trên máy chủ của riêng bạn

    Để sử dụng SDK Quản trị của Firebase trên máy chủ của riêng bạn, hãy sử dụng tài khoản dịch vụ.

    Chuyển đến IAM và quản trị viên > Tài khoản dịch vụ trong bảng điều khiển Google Cloud. Tạo khoá riêng tư mới và lưu tệp JSON . Sau đó, sử dụng tệp này để khởi chạy 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
    Cloud Firestore SDK được khởi chạy theo nhiều cách, tuỳ thuộc vào môi trường của bạn. Dưới đây là những phương pháp phổ biến nhất. Để tham khảo đầy đủ, xem Khởi chạy SDK dành cho quản trị viên.
  • Khởi chạy trên Google Cloud
    import firebase_admin
    from firebase_admin import firestore
    
    # Application Default credentials are automatically created.
    app = firebase_admin.initialize_app()
    db = firestore.client()

    Thông tin xác thực mặc định của ứng dụng hiện có cũng có thể được sử dụng để khởi chạy 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()
  • Khởi động trên máy chủ của riêng bạn

    Để sử dụng SDK Quản trị của Firebase trên máy chủ của riêng bạn, hãy sử dụng tài khoản dịch vụ.

    Chuyển đến IAM và quản trị viên > Tài khoản dịch vụ trong bảng điều khiển Google Cloud. Tạo khoá riêng tư mới và lưu tệp JSON . Sau đó, sử dụng tệp này để khởi chạy 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

    Cloud Firestore SDK được khởi chạy theo nhiều cách, tuỳ thuộc vào môi trường của bạn. Dưới đây là những phương pháp phổ biến nhất. Để tham khảo đầy đủ, xem Khởi chạy SDK dành cho quản trị viên.
  • Khởi chạy trên Google Cloud
    import firebase_admin
    from firebase_admin import firestore_async
    
    # Application Default credentials are automatically created.
    app = firebase_admin.initialize_app()
    db = firestore_async.client()

    Thông tin xác thực mặc định của ứng dụng hiện có cũng có thể được sử dụng để khởi chạy 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()
  • Khởi động trên máy chủ của riêng bạn

    Để sử dụng SDK Quản trị của Firebase trên máy chủ của riêng bạn, hãy sử dụng tài khoản dịch vụ.

    Chuyển đến IAM và quản trị viên > Tài khoản dịch vụ trong bảng điều khiển Google Cloud. Tạo khoá riêng tư mới và lưu tệp JSON . Sau đó, sử dụng tệp này để khởi chạy 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
    Cloud Firestore SDK được khởi chạy theo nhiều cách, tuỳ thuộc vào môi trường của bạn. Dưới đây là những phương pháp phổ biến nhất. Để tham khảo đầy đủ, xem Khởi chạy SDK dành cho quản trị viên.
    • Khởi chạy trên Cloud Functions
      const { initializeApp, applicationDefault, cert } = require('firebase-admin/app');
      const { getFirestore, Timestamp, FieldValue, Filter } = require('firebase-admin/firestore');
      initializeApp();
      
      const db = getFirestore();
      
    • Khởi chạy trên 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();
    • Khởi động trên máy chủ của riêng bạn

      Để sử dụng SDK dành cho quản trị viên Firebase trên máy chủ của riêng bạn (hoặc bất kỳ môi trường Node.js nào khác), sử dụng tài khoản dịch vụ. Truy cập vào IAM & quản trị viên > Tài khoản dịch vụ trong bảng điều khiển Google Cloud. Tạo một khoá riêng tư mới rồi lưu tệp JSON. Sau đó, sử dụng tệp này để khởi chạy 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();
      
    Tiến hành
    Cloud Firestore SDK được khởi chạy theo nhiều cách, tuỳ thuộc vào môi trường của bạn. Dưới đây là những phương pháp phổ biến nhất. Để tham khảo đầy đủ, xem Khởi chạy SDK dành cho quản trị viên.
  • Khởi chạy trên Google Cloud
    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()
    
  • Khởi động trên máy chủ của riêng bạn

    Để sử dụng SDK Quản trị của Firebase trên máy chủ của riêng bạn, hãy sử dụng tài khoản dịch vụ.

    Chuyển đến IAM và quản trị viên > Tài khoản dịch vụ trong bảng điều khiển Google Cloud. Tạo khoá riêng tư mới và lưu tệp JSON . Sau đó, sử dụng tệp này để khởi chạy 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

    Để biết thêm thông tin về cách cài đặt và tạo ứng dụng Cloud Firestore, hãy tham khảo Thư viện ứng dụng Cloud Firestore.

    use Google\Cloud\Firestore\FirestoreClient;
    
    /**
     * Initialize Cloud Firestore with default project ID.
     */
    function setup_client_create(string $projectId = null)
    {
        // Create the Cloud Firestore client
        if (empty($projectId)) {
            // The `projectId` 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.
            $db = new FirestoreClient();
            printf('Created Cloud Firestore client with default project ID.' . PHP_EOL);
        } else {
            $db = new FirestoreClient([
                'projectId' => $projectId,
            ]);
            printf('Created Cloud Firestore client with project ID: %s' . PHP_EOL, $projectId);
        }
    }
    Unity
    using Firebase.Firestore;
    using Firebase.Extensions;
    FirebaseFirestore db = FirebaseFirestore.DefaultInstance;
    C#

    C#

    Để biết thêm thông tin về cách cài đặt và tạo ứng dụng Cloud Firestore, hãy tham khảo Thư viện ứng dụng Cloud Firestore.

    FirestoreDb db = FirestoreDb.Create(project);
    Console.WriteLine("Created Cloud Firestore client with project ID: {0}", project);
    Ruby
    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."

    Thêm dữ liệu

    Cloud Firestore lưu trữ dữ liệu trong phần Tài liệu và dữ liệu này được lưu trữ trong Bộ sưu tập. Cloud Firestore tự động tạo các tập hợp và tài liệu khi bạn thêm dữ liệu vào tài liệu lần đầu tiên. Bạn không cần phải tạo bộ sưu tập hoặc tài liệu.

    Tạo bộ sưu tập mới và tài liệu bằng mã ví dụ sau.

    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
    Lưu ý: Sản phẩm này không hoạt động trên các mục tiêu watchOS và App Clip.
    // 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
    Lưu ý: Sản phẩm này không hoạt động trên các mục tiêu watchOS và App Clip.
    // Add a new document with a generated ID
    __block FIRDocumentReference *ref =
        [[self.db collectionWithPath:@"users"] addDocumentWithData:@{
          @"first": @"Ada",
          @"last": @"Lovelace",
          @"born": @1815
        } completion:^(NSError * _Nullable error) {
          if (error != nil) {
            NSLog(@"Error adding document: %@", error);
          } else {
            NSLog(@"Document added with ID: %@", ref.documentID);
          }
        }];

    Kotlin+KTX

    // 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
    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());
    Python
    doc_ref = db.collection("users").document("alovelace")
    doc_ref.set({"first": "Ada", "last": "Lovelace", "born": 1815})

    Python

    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()
                  << std::endl;
      } else {
        std::cout << "Error adding document: " << future.error_message() << std::endl;
      }
    });
    Node.js
    const docRef = db.collection('users').doc('alovelace');
    
    await docRef.set({
      first: 'Ada',
      last: 'Lovelace',
      born: 1815
    });
    Tiến hành
    _, _, 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)
    }
    PHP

    PHP

    Để biết thêm thông tin về cách cài đặt và tạo ứng dụng Cloud Firestore, hãy tham khảo Thư viện ứng dụng Cloud Firestore.

    $docRef = $db->collection('samples/php/users')->document('alovelace');
    $docRef->set([
        'first' => 'Ada',
        'last' => 'Lovelace',
        'born' => 1815
    ]);
    printf('Added data to the lovelace document in the users collection.' . PHP_EOL);
    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#
    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);
    Ruby
    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."

    Bây giờ, hãy thêm một tài liệu khác vào bộ sưu tập users. Lưu ý rằng tài liệu này bao gồm cặp khoá-giá trị (tên đệm) không xuất hiện trong phần đầu tiên tài liệu. Các tài liệu trong một bộ sưu tập có thể chứa nhiều nhóm thông tin.

    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
    Lưu ý: Sản phẩm này không hoạt động trên các mục tiêu watchOS và App Clip.
    // 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
    Lưu ý: Sản phẩm này không hoạt động trên các mục tiêu watchOS và App Clip.
    // Add a second document with a generated ID.
    __block FIRDocumentReference *ref =
        [[self.db collectionWithPath:@"users"] addDocumentWithData:@{
          @"first": @"Alan",
          @"middle": @"Mathison",
          @"last": @"Turing",
          @"born": @1912
        } completion:^(NSError * _Nullable error) {
          if (error != nil) {
            NSLog(@"Error adding document: %@", error);
          } else {
            NSLog(@"Document added with ID: %@", ref.documentID);
          }
        }];

    Kotlin+KTX

    // 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
    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());
    Python
    doc_ref = db.collection("users").document("aturing")
    doc_ref.set({"first": "Alan", "middle": "Mathison", "last": "Turing", "born": 1912})

    Python

    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() << std::endl;
          } else {
            std::cout << "Error adding document: " << future.error_message()
                      << std::endl;
          }
        });
    Node.js
    const aTuringRef = db.collection('users').doc('aturing');
    
    await aTuringRef.set({
      'first': 'Alan',
      'middle': 'Mathison',
      'last': 'Turing',
      'born': 1912
    });
    Tiến hành
    _, _, 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)
    }
    PHP

    PHP

    Để biết thêm thông tin về cách cài đặt và tạo ứng dụng Cloud Firestore, hãy tham khảo Thư viện ứng dụng Cloud Firestore.

    $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);
    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#
    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);
    Ruby
    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."

    Đọc dữ liệu

    Sử dụng dữ liệu người xem ở Bảng điều khiển của Firebase để nhanh chóng xác minh rằng bạn đã thêm dữ liệu vào Cloud Firestore.

    Bạn cũng có thể sử dụng lệnh "get" để truy xuất toàn bộ bộ sưu tập.

    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
    Lưu ý: Sản phẩm này không hoạt động trên các mục tiêu watchOS và App Clip.
    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
    Lưu ý: Sản phẩm này không hoạt động trên các mục tiêu watchOS và App Clip.
    [[self.db collectionWithPath:@"users"]
        getDocumentsWithCompletion:^(FIRQuerySnapshot * _Nullable snapshot,
                                     NSError * _Nullable error) {
          if (error != nil) {
            NSLog(@"Error getting documents: %@", error);
          } else {
            for (FIRDocumentSnapshot *document in snapshot.documents) {
              NSLog(@"%@ => %@", document.documentID, document.data);
            }
          }
        }];

    Kotlin+KTX

    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
    // 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"));
    }
    Python
    users_ref = db.collection("users")
    docs = users_ref.stream()
    
    for doc in docs:
        print(f"{doc.id} => {doc.to_dict()}")

    Python

    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 << std::endl;
        }
      } else {
        std::cout << "Error getting documents: " << future.error_message()
                  << std::endl;
      }
    });
    Node.js
    const snapshot = await db.collection('users').get();
    snapshot.forEach((doc) => {
      console.log(doc.id, '=>', doc.data());
    });
    Tiến hành
    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())
    }
    PHP

    PHP

    Để biết thêm thông tin về cách cài đặt và tạo ứng dụng Cloud Firestore, hãy tham khảo Thư viện ứng dụng Cloud Firestore.

    $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);
    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#
    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();
    }
    Ruby
    users_ref = firestore.col collection_path
    users_ref.get do |user|
      puts "#{user.document_id} data: #{user.data}."
    end

    Bảo mật dữ liệu của bạn

    Nếu bạn đang sử dụng SDK nền tảng Web, Android hoặc Apple, hãy sử dụng Firebase Xác thựcQuy tắc bảo mật của Cloud Firestore để bảo mật dữ liệu của bạn trong Cloud Firestore.

    Dưới đây là một số bộ quy tắc cơ bản mà bạn có thể sử dụng để bắt đầu. Bạn có thể sửa đổi quy tắc bảo mật trong Quy tắc thẻ / bảng điều khiển.

    Yêu cầu xác thực

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

    Chế độ khoá

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

    Trước khi triển khai phiên bản chính thức của ứng dụng web, Android hoặc iOS, bạn cũng cần thực hiện các bước để đảm bảo rằng chỉ ứng dụng khách mới có thể truy cập vào dữ liệu của bạn trên Cloud Firestore. Xem tài liệu về Kiểm tra ứng dụng.

    Nếu bạn đang sử dụng một trong các SDK máy chủ, hãy sử dụng tính năng Quản lý danh tính và quyền truy cập (IAM) để bảo mật dữ liệu của bạn trong Cloud Firestore.

    Xem video hướng dẫn

    Để được hướng dẫn chi tiết về cách bắt đầu sử dụng Cloud Firestore thư viện ứng dụng di động, hãy xem một trong các video hướng dẫn sau:

    Web
    iOS trở lên
    Android

    Bạn có thể tìm thêm video trong Firebase Kênh YouTube.

    Các bước tiếp theo

    Trau dồi kiến thức qua các chủ đề sau: