Check out what’s new from Firebase at Google I/O 2022. Learn more

Cài đặt, cấu hình và tích hợp Local Emulator Suite

Bộ mô phỏng cục bộ Firebase có thể được cài đặt và định cấu hình cho các môi trường thử nghiệm và nguyên mẫu khác nhau, từ các phiên tạo mẫu một lần đến quy trình công việc tích hợp liên tục ở quy mô sản xuất.

Cài đặt Bộ mô phỏng cục bộ

Trước khi cài đặt Emulator Suite, bạn sẽ cần:

  • Node.js phiên bản 8.0 trở lên.
  • Phiên bản Java 1.8 trở lên.

Để cài đặt Bộ giả lập:

  1. Cài đặt Firebase CLI . Nếu bạn chưa cài đặt Firebase CLI, hãy cài đặt nó ngay bây giờ . Bạn sẽ cần CLI phiên bản 8.14.0 trở lên để sử dụng Bộ giả lập. Bạn có thể kiểm tra phiên bản mình đã cài đặt bằng lệnh sau:
    firebase --version
  2. Nếu bạn chưa làm như vậy, hãy khởi tạo thư mục làm việc hiện tại dưới dạng dự án Firebase, làm theo lời nhắc trên màn hình để chỉ định sản phẩm nào sẽ sử dụng:
    firebase init
  3. Thiết lập Bộ giả lập. Lệnh này khởi động trình hướng dẫn cấu hình cho phép bạn chọn trình giả lập quan tâm, tải xuống tệp nhị phân trình mô phỏng tương ứng và đặt các cổng trình mô phỏng nếu giá trị mặc định không phù hợp.
    firebase init emulators

Sau khi cài đặt trình mô phỏng, không có kiểm tra cập nhật nào được thực hiện và không có tải xuống tự động bổ sung nào xảy ra cho đến khi bạn cập nhật phiên bản Firebase CLI của mình.

Định cấu hình Bộ giả lập

Bạn có thể tùy chọn định cấu hình cổng mạng của trình giả lập và đường dẫn đến định nghĩa Quy tắc bảo mật trong tệp firebase.json :

  • Thay đổi các cổng trình giả lập bằng cách chạy firebase init emulators hoặc bằng cách chỉnh sửa firebase.json theo cách thủ công.
  • Thay đổi đường dẫn đến định nghĩa Quy tắc bảo mật bằng cách chỉnh sửa firebase.json theo cách thủ công.

Nếu bạn không định cấu hình các cài đặt này, trình giả lập sẽ lắng nghe trên các cổng mặc định của chúng và trình giả lập Cloud Firestore, Cơ sở dữ liệu thời gian thực và Lưu trữ đám mây sẽ chạy với bảo mật dữ liệu mở.

Yêu cầu Sự miêu tả
init giả lập Khởi động trình hướng dẫn khởi tạo trình giả lập. Xác định trình giả lập sẽ được cài đặt và tùy chọn chỉ định cài đặt cổng trình mô phỏng. init emulators là không phá hủy; chấp nhận các giá trị mặc định sẽ giữ nguyên cấu hình trình giả lập hiện tại.

Cấu hình cổng

Mỗi trình mô phỏng liên kết với một cổng khác nhau trên máy của bạn với một giá trị mặc định ưu tiên.

Giả lập Cổng mặc định
Xác thực 9099
Giao diện người dùng bộ giả lập 4000
Chức năng đám mây 5001
Cơ sở dữ liệu thời gian thực 9000
Cloud Firestore 8080
Lưu trữ đám mây 9199
Lưu trữ Firebase 5000
Pub / Sub 8085

Cấu hình quy tắc bảo mật

Trình giả lập sẽ lấy cấu hình Quy tắc bảo mật từ database , firestore storage và khóa cấu hình lưu trữ trong firebase.json .

{
  // Existing firebase configuration ...
  "database": {
    "rules": "database.rules.json"
  },
  "firestore" {
    "rules": "firestore.rules"
  },
  "storage" {
    "rules": "storage.rules"
  }

  // ...

  // Optional emulator configuration. Default
  // values are used if absent.
  "emulators": {
    "firestore": {
      "port": "8080"
    },
    "ui": {
      "enabled": true,      // Default is `true`
      "port": 4000          // If unspecified, see CLI log for selected port
    },
    "auth": {
      "port": "9099"
    },
    "pubsub": {
      "port": "8085"
    }
  }
}

Chỉ định các tùy chọn Java

Trình giả lập Cơ sở dữ liệu thời gian thực, trình mô phỏng Cloud Firestore và một phần của trình mô phỏng Cloud Storage dựa trên Java, có thể được tùy chỉnh bằng cờ JVM thông qua biến môi trường JAVA_TOOL_OPTIONS .

Ví dụ: nếu bạn gặp lỗi liên quan đến không gian heap Java, bạn có thể tăng kích thước heap Java tối đa lên 4GB:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Nhiều cờ có thể được chỉ định trong dấu ngoặc kép được phân tách bằng dấu cách, như JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" . Các cờ chỉ ảnh hưởng đến các thành phần dựa trên Java của trình giả lập và không ảnh hưởng đến các phần khác của Firebase CLI, chẳng hạn như giao diện người dùng Emulator Suite.

Khởi động trình giả lập

Bạn có thể khởi động trình giả lập để chạy cho đến khi kết thúc theo cách thủ công hoặc chạy trong khoảng thời gian của tập lệnh thử nghiệm được chỉ định sau đó tự động tắt.

Yêu cầu Sự miêu tả
trình giả lập: bắt đầu Khởi động trình giả lập cho các sản phẩm Firebase được định cấu hình trong firebase.json . Các quy trình giả lập sẽ tiếp tục chạy cho đến khi dừng lại một cách rõ ràng. Gọi emulators:start sẽ tải trình giả lập xuống ~ / .cache / firebase / emulators / nếu chúng chưa được cài đặt.
Lá cờ Giải mã
--only Không bắt buộc. Giới hạn trình giả lập bắt đầu. Cung cấp danh sách tên trình giả lập được phân tách bằng dấu phẩy, chỉ định một hoặc nhiều 'auth', 'database', 'firestore', 'functions', 'hosting' hoặc 'pubsub'.
--inspect-functions debug_port Không bắt buộc. Sử dụng với trình giả lập Chức năng đám mây để bật gỡ lỗi điểm ngắt của các chức năng tại cổng được chỉ định (hoặc cổng mặc định 9229 nếu đối số bị bỏ qua). Lưu ý rằng khi cờ này được cung cấp, trình giả lập Chức năng đám mây sẽ chuyển sang chế độ thực thi tuần tự đặc biệt, trong đó các chức năng được thực thi trong một quy trình duy nhất, theo thứ tự tuần tự (FIFO); điều này đơn giản hóa việc gỡ lỗi chức năng, mặc dù hành vi khác với đa quy trình, thực hiện song song các chức năng trong đám mây.
--export-on-exit= Không bắt buộc. Sử dụng với Trình giả lập Authentication, Cloud Firestore, Cơ sở dữ liệu thời gian thực hoặc Cloud Storage. Hướng dẫn (các) trình giả lập xuất dữ liệu sang một thư mục khi quá trình tắt xảy ra, như được mô tả cho lệnh emulators:export . Thư mục xuất có thể được chỉ định bằng cờ này: firebase emulators:start --export-on-exit=./saved-data . Nếu --import được sử dụng, đường dẫn xuất sẽ mặc định giống nhau; ví dụ: firebase emulators:start --import=./data-path --export-on-exit . Cuối cùng, nếu muốn, hãy chuyển các đường dẫn thư mục khác nhau tới cờ --import--export-on-exit .
--import= import_directory Không bắt buộc. Sử dụng với Trình giả lập Authentication, Cloud Firestore, Cơ sở dữ liệu thời gian thực hoặc Cloud Storage. Nhập dữ liệu đã lưu bằng cách sử dụng tùy chọn khởi động --export-on-exit hoặc emulators:export lệnh sang phiên bản Trình giả lập Authentication, Cloud Firestore, Cơ sở dữ liệu thời gian thực hoặc Cloud Storage đang chạy. Mọi dữ liệu hiện có trong bộ nhớ giả lập sẽ bị ghi đè.
trình giả lập: scriptpath Chạy tập lệnh tại scriptpath sau khi khởi động trình giả lập cho các sản phẩm Firebase được định cấu hình trong firebase.json . Các quy trình giả lập sẽ tự động dừng khi tập lệnh chạy xong.
Lá cờ Giải mã
--only Không bắt buộc. Giới hạn trình giả lập bắt đầu. Cung cấp danh sách tên trình giả lập được phân tách bằng dấu phẩy, chỉ định một hoặc nhiều 'firestore', 'database', 'functions', 'hosting' hoặc 'pubsub'.
--inspect-functions debug_port Không bắt buộc. Sử dụng với trình giả lập Chức năng đám mây để bật gỡ lỗi điểm ngắt của các chức năng tại cổng được chỉ định (hoặc cổng mặc định 9229 nếu đối số bị bỏ qua). Lưu ý rằng khi cờ này được cung cấp, trình giả lập Chức năng đám mây sẽ chuyển sang chế độ thực thi tuần tự đặc biệt, trong đó các chức năng được thực thi trong một quy trình duy nhất, theo thứ tự tuần tự (FIFO); điều này đơn giản hóa việc gỡ lỗi chức năng, mặc dù hành vi khác với đa quy trình, thực hiện song song các chức năng trong đám mây.
--export-on-exit= Không bắt buộc. Sử dụng với Trình giả lập Authentication, Cloud Firestore, Cơ sở dữ liệu thời gian thực hoặc Cloud Storage. Hướng dẫn (các) trình giả lập xuất dữ liệu sang một thư mục khi quá trình tắt xảy ra, như được mô tả cho lệnh emulators:export . Thư mục xuất có thể được chỉ định bằng cờ này: firebase emulators:start --export-on-exit=./saved-data . Nếu --import được sử dụng, đường dẫn xuất sẽ mặc định giống nhau; ví dụ: firebase emulators:start --import=./data-path --export-on-exit . Cuối cùng, nếu muốn, hãy chuyển các đường dẫn thư mục khác nhau tới cờ --import--export-on-exit .
--import= import_directory Không bắt buộc. Sử dụng với Trình giả lập Authentication, Cloud Firestore, Cơ sở dữ liệu thời gian thực hoặc Cloud Storage. Nhập dữ liệu đã lưu bằng cách sử dụng tùy chọn khởi động --export-on-exit hoặc emulators:export lệnh sang phiên bản Trình giả lập Authentication, Cloud Firestore, Cơ sở dữ liệu thời gian thực hoặc Cloud Storage đang chạy. Mọi dữ liệu hiện có trong bộ nhớ giả lập sẽ bị ghi đè.
--ui Không bắt buộc. Chạy giao diện người dùng giả lập trong khi thực thi.

Trình firebase emulators:exec phương pháp thực thi thường thích hợp hơn cho các quy trình tích hợp liên tục.

Xuất và nhập dữ liệu giả lập

Bạn có thể xuất dữ liệu từ trình giả lập Xác thực, Cloud Firestore, Cơ sở dữ liệu thời gian thực và Lưu trữ đám mây để sử dụng làm tập dữ liệu cơ sở chung, có thể chia sẻ. Các tập dữ liệu này có thể được nhập bằng cờ --import , như được mô tả ở trên.

trình giả lập: export export_directory

Xác thực, Cloud Firestore, Cơ sở dữ liệu thời gian thực hoặc trình giả lập Cloud Storage . Xuất dữ liệu từ phiên bản Trình mô phỏng Cloud Firestore, Cơ sở dữ liệu thời gian thực hoặc Lưu trữ đám mây đang chạy. export_directory được chỉ định sẽ được tạo nếu nó chưa tồn tại. Nếu thư mục được chỉ định tồn tại, bạn sẽ được nhắc xác nhận rằng dữ liệu xuất trước đó sẽ được ghi đè. Bạn có thể bỏ qua lời nhắc này bằng cách sử dụng cờ --force . Thư mục xuất chứa tệp kê khai dữ liệu, firebase-export-metadata.json .

Bạn có thể hướng dẫn trình giả lập tự động xuất dữ liệu khi chúng tắt bằng cách sử dụng cờ --export-on-exit được mô tả ở trên.

Tích hợp với hệ thống CI của bạn

Chạy hình ảnh Bộ giả lập được chứa trong vùng chứa

Cài đặt và cấu hình Bộ phần mềm giả lập với các vùng chứa trong thiết lập CI điển hình rất đơn giản.

Có một số vấn đề cần lưu ý:

  • Các tệp JAR được cài đặt và lưu vào bộ nhớ đệm tại ~/.cache/firebase/emulators/ .

    • Bạn có thể muốn thêm đường dẫn này vào cấu hình bộ nhớ cache CI của mình để tránh tải xuống lặp lại.
  • Nếu bạn không có tệp firebase.json trong kho lưu trữ của mình, bạn phải thêm đối số dòng lệnh vào lệnh emulators:start hoặc emulators:exec để chỉ định trình giả lập nào nên được khởi động. Ví dụ,
    --only functions,firestore .

Tạo mã thông báo xác thực (chỉ trình mô phỏng lưu trữ)

Nếu quy trình tích hợp liên tục của bạn dựa trên Lưu trữ Firebase, thì bạn sẽ cần đăng nhập bằng mã thông báo để chạy firebase emulators:exec thi hành. Các trình giả lập khác không yêu cầu đăng nhập.

Để tạo mã thông báo, hãy chạy firebase login:ci trên môi trường cục bộ của bạn; điều này không nên được thực hiện từ một hệ thống CI. Làm theo hướng dẫn để xác thực. Bạn chỉ cần thực hiện bước này một lần cho mỗi dự án, vì mã thông báo sẽ có hiệu lực trên các bản dựng. Mã thông báo phải được coi như một mật khẩu; đảm bảo rằng nó được giữ bí mật.

Nếu môi trường CI của bạn cho phép bạn chỉ định các biến môi trường có thể được sử dụng trong các tập lệnh xây dựng, chỉ cần tạo một biến môi trường có tên là FIREBASE_TOKEN , với giá trị là chuỗi mã thông báo truy cập. Firebase CLI sẽ tự động nhận biến môi trường FIREBASE_TOKEN và trình giả lập sẽ khởi động đúng cách.

Phương án cuối cùng, bạn có thể chỉ cần đưa mã thông báo vào tập lệnh xây dựng của mình, nhưng hãy đảm bảo rằng các bên không đáng tin cậy không có quyền truy cập. Đối với phương pháp mã hóa cứng này, bạn có thể thêm --token "YOUR_TOKEN_STRING_HERE" vào lệnh firebase emulators:exec execute.

Sử dụng API REST của trung tâm giả lập

Liệt kê các trình giả lập đang chạy

Để liệt kê các trình giả lập hiện đang chạy, hãy gửi yêu cầu GET tới điểm cuối /emulators của Trung tâm trình mô phỏng.

curl localhost:4400/emulators

Kết quả sẽ là một đối tượng JSON liệt kê tất cả các trình giả lập đang chạy và cấu hình máy chủ / cổng của chúng, ví dụ:

{
  "hub":{
    "name": "hub",
    "host": "localhost",
    "port": 4400
  },
  "functions": {
    "name": "functions",
    "host": "localhost",
    "port": 5001
  }
  "firestore": {
    "name": "firestore",
    "host": "localhost",
    "port": 8080
  }
}

Bật / Tắt trình kích hoạt chức năng nền

Trong một số trường hợp, bạn sẽ cần phải tạm thời tắt chức năng cục bộ và trình kích hoạt tiện ích mở rộng. Ví dụ: bạn có thể muốn xóa tất cả dữ liệu trong trình giả lập Cloud Firestore mà không kích hoạt bất kỳ chức năng onDelete nào đang chạy trong trình giả lập Chức năng đám mây hoặc Tiện ích mở rộng.

Để tạm thời vô hiệu hóa các trình kích hoạt chức năng cục bộ, hãy gửi yêu cầu PUT đến điểm cuối /functions/disableBackgroundTriggers của Trung tâm trình mô phỏng.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Kết quả sẽ là một đối tượng JSON mô tả chi tiết trạng thái hiện tại.

{
  "enabled": false
}

Để bật các trình kích hoạt chức năng cục bộ sau khi chúng đã bị vô hiệu hóa, hãy gửi yêu cầu PUT tới điểm cuối /functions/enableBackgroundTriggers của Trung tâm trình mô phỏng.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Kết quả sẽ là một đối tượng JSON mô tả chi tiết trạng thái hiện tại.

{
  "enabled": true
}

Tích hợp SDK trình mô phỏng

Các bảng trong phần này cho biết trình giả lập nào được hỗ trợ bởi SDK ứng dụng khách và quản trị viên. Tương lai có nghĩa là hỗ trợ giả lập đã được lên kế hoạch nhưng chưa có sẵn.

Tính khả dụng của SDK ứng dụng

Android Nền tảng của Apple Web Giao diện người dùng Firebase
Android
Giao diện người dùng Firebase
iOS
Giao diện người dùng Firebase
Web
Cơ sở dữ liệu thời gian thực 19.4.0 7.2.0 8.0.0 6.4.0 Tương lai N / A
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Tương lai N / A
Xác thực 20.0.0 7.0.0 8.0.0 7.0.0 Tương lai Tương lai
Lưu trữ đám mây 20.0.0 8.0.0 8.4.0 N / A N / A N / A
Chức năng đám mây 19.1.0 7.2.0 8.0.0 N / A N / A N / A
Lưu trữ N / A N / A N / A N / A N / A N / A
Tiện ích mở rộng N / A N / A N / A N / A N / A N / A

Tính khả dụng của SDK quản trị viên

Nút Java Python Đi
Cơ sở dữ liệu thời gian thực 8.6.0 6.10.0 2.18.0 Tương lai
Cloud Firestore 8.0.0 6.10.0 3.0.0 1.0.0
Xác thực 9.3.0 7.2.0 5.0.0 4.2.0
Lưu trữ đám mây 9.8.0 Tương lai Tương lai Tương lai
Chức năng đám mây N / A N / A N / A N / A
Lưu trữ N / A N / A N / A N / A
Tiện ích mở rộng N / A N / A N / A N / A