คุณติดตั้งและกำหนดค่า Firebase Local Emulator Suite สำหรับสภาพแวดล้อมการสร้างต้นแบบและการทดสอบต่างๆ ได้ ตั้งแต่เซสชันการสร้างต้นแบบแบบครั้งเดียวไปจนถึงเวิร์กโฟลว์การรวมอย่างต่อเนื่องระดับการผลิต
ติดตั้ง Local Emulator Suite
ก่อนติดตั้ง Emulator Suite คุณจะต้องมีสิ่งต่อไปนี้
วิธีติดตั้งชุดโปรแกรมจำลอง
- ติดตั้ง Firebase CLI
    หากยังไม่ได้ติดตั้ง Firebase CLI
    ให้ติดตั้งตอนนี้
    คุณต้องใช้ CLI เวอร์ชัน 8.14.0 ขึ้นไปจึงจะใช้ชุดโปรแกรมจำลองได้ คุณ
    ตรวจสอบเวอร์ชันที่ติดตั้งได้โดยใช้คำสั่งต่อไปนี้
    
firebase --version
 - หากยังไม่ได้ดำเนินการ ให้เริ่มต้นไดเรกทอรีการทำงานปัจจุบัน
    เป็นโปรเจ็กต์ Firebase โดยทำตามข้อความแจ้งบนหน้าจอเพื่อระบุผลิตภัณฑ์
    ที่จะใช้
    
firebase init
 - ตั้งค่าชุดโปรแกรมจำลอง คำสั่งนี้จะเริ่มวิซาร์ดการกำหนดค่าที่
    ช่วยให้คุณเลือกโปรแกรมจำลองที่สนใจ ดาวน์โหลดไบนารีของโปรแกรมจำลองที่เกี่ยวข้อง
    และตั้งค่าพอร์ตของโปรแกรมจำลองได้หากค่าเริ่มต้นไม่เหมาะสม
    
firebase init emulators
 
เมื่อติดตั้งโปรแกรมจำลองแล้ว ระบบจะไม่ตรวจหาการอัปเดตและจะไม่มีการดาวน์โหลดอัตโนมัติเพิ่มเติมจนกว่าคุณจะอัปเดต Firebase CLI เป็นเวอร์ชันล่าสุด
กำหนดค่าชุดโปรแกรมจำลอง
คุณเลือกกำหนดค่าพอร์ตเครือข่ายของโปรแกรมจำลองและเส้นทางไปยังคำจำกัดความของกฎความปลอดภัยได้ในไฟล์ firebase.json
- เปลี่ยนพอร์ตของโปรแกรมจำลองโดยเรียกใช้ 
firebase init emulatorsหรือแก้ไขfirebase.jsonด้วยตนเอง - เปลี่ยนเส้นทางไปยังคำจำกัดความของกฎความปลอดภัยโดยการแก้ไข 
firebase.jsonด้วยตนเอง 
หากคุณไม่ได้กำหนดค่าเหล่านี้ อีมูเลเตอร์จะรับฟังในพอร์ตเริ่มต้น และอีมูเลเตอร์ Cloud Firestore, Realtime Database และ Cloud Storage for Firebase จะทำงานโดยมีความปลอดภัยของข้อมูลแบบเปิด
| คำสั่ง | คำอธิบาย | 
|---|---|
| init emulators | เริ่มวิซาร์ดการเริ่มต้นโปรแกรมจำลอง ระบุโปรแกรมจำลองที่จะติดตั้ง และระบุการตั้งค่าพอร์ตของโปรแกรมจำลอง (ไม่บังคับ) init emulators ไม่ทำลายข้อมูล การยอมรับค่าเริ่มต้นจะรักษาการกำหนดค่าโปรแกรมจำลองปัจจุบันไว้ | 
  
การกำหนดค่าพอร์ต
โปรแกรมจำลองแต่ละโปรแกรมจะเชื่อมโยงกับพอร์ตที่แตกต่างกันในเครื่องของคุณโดยมีค่าเริ่มต้นที่ต้องการ
| โปรแกรมจำลอง | พอร์ตเริ่มต้น | 
|---|---|
| Authentication | 9099 | 
| App Hosting | 5002 | 
| Emulator Suite UI | 4000 | 
| Cloud Functions | 5001 | 
| Eventarc | 9299 | 
| Realtime Database | 9000 | 
| Cloud Firestore | 8080 | 
| Cloud Storage for Firebase | 9199 | 
| Firebase Hosting | 5000 | 
| Pub/Sub | 8085 | 
การกำหนดค่ารหัสโปรเจ็กต์
คุณอาจเรียกใช้ Emulator หลายอินสแตนซ์โดยใช้รหัสโปรเจ็กต์ Firebase ที่แตกต่างกัน หรือเรียกใช้ Emulator หลายอินสแตนซ์สำหรับรหัสโปรเจ็กต์ที่กำหนด ทั้งนี้ขึ้นอยู่กับวิธีเรียกใช้ Emulator ในกรณีดังกล่าว อินสแตนซ์โปรแกรมจำลองจะทำงานใน สภาพแวดล้อมที่แยกต่างหาก
โดยทั่วไปแล้ว การตั้งรหัสโปรเจ็กต์เดียวสำหรับการเรียกใช้โปรแกรมจำลองทั้งหมดถือเป็นแนวทางปฏิบัติที่ดี เพื่อให้ Emulator Suite UI, โปรแกรมจำลองผลิตภัณฑ์ต่างๆ และอินสแตนซ์ที่กำลังทำงานทั้งหมดของโปรแกรมจำลองหนึ่งๆ สามารถสื่อสารได้อย่างถูกต้องในทุกกรณี
Local Emulator Suite จะแสดงคำเตือนเมื่อตรวจพบรหัสโปรเจ็กต์หลายรายการใน
สภาพแวดล้อม แต่คุณสามารถลบล้างลักษณะการทำงานนี้ได้โดยตั้งค่าคีย์ singleProjectMode เป็น false ใน firebase.json
คุณสามารถตรวจสอบการประกาศรหัสโปรเจ็กต์เพื่อดูความไม่ตรงกันได้ใน
- โปรเจ็กต์เริ่มต้นในบรรทัดคำสั่ง โดยค่าเริ่มต้น ระบบจะใช้รหัสโปรเจ็กต์
เมื่อเริ่มต้นจากโปรเจ็กต์ที่เลือกด้วย 
firebase initหรือfirebase useหากต้องการดูรายการโปรเจ็กต์ (และดูว่ามีการเลือกโปรเจ็กต์ใด) ให้ ใช้firebase projects:list - การทดสอบหน่วยของกฎ โดยมักจะระบุรหัสโปรเจ็กต์ในการเรียกใช้เมธอดของไลบรารีการทดสอบหน่วยของกฎ 
initializeTestEnvironmentหรือinitializeTestApp - Flag บรรทัดคำสั่ง 
--projectการส่งแฟล็ก Firebase CLI--projectจะลบล้างโปรเจ็กต์เริ่มต้น คุณจะต้องตรวจสอบว่าค่าของ Flag ตรงกับรหัสโปรเจ็กต์ในการทดสอบหน่วยและการเริ่มต้นแอป 
นอกจากนี้ ให้ตรวจสอบการกำหนดค่ารหัสโปรเจ็กต์เฉพาะแพลตฟอร์มที่คุณตั้งค่าไว้ขณะ กำหนดค่าโปรเจ็กต์ Apple Platforms Android และเว็บ
การกำหนดค่ากฎความปลอดภัย
โปรแกรมจำลองจะใช้การกำหนดค่ากฎความปลอดภัยจาก database,
firestore และคีย์การกำหนดค่า storage ใน 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": {
    "singleProjectMode": false, // do not warn on detection of multiple project IDs
    "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"
    }
  }
}
การระบุตัวเลือก Java
โปรแกรมจำลอง Realtime Database, โปรแกรมจำลอง Cloud Firestore และส่วนหนึ่งของโปรแกรมจำลอง
Cloud Storage for Firebase สร้างขึ้นจาก Java ซึ่งปรับแต่งได้
ด้วยแฟล็ก JVM ผ่านตัวแปรสภาพแวดล้อม JAVA_TOOL_OPTIONS
ตัวอย่างเช่น หากพบข้อผิดพลาดเกี่ยวกับพื้นที่ฮีปของ Java คุณอาจเพิ่ม ขนาดฮีปของ Java สูงสุดเป็น 4 GB ได้โดยทำดังนี้
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
คุณระบุแฟล็กหลายรายการในเครื่องหมายคำพูดโดยคั่นด้วยการเว้นวรรคได้ เช่น
JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" โดยแฟล็กจะมีผลกับคอมโพเนนต์ที่ใช้ Java
 ของโปรแกรมจำลองเท่านั้น และจะไม่มีผลกับส่วนอื่นๆ ของ FirebaseCLI เช่น Emulator Suite UI
เริ่มโปรแกรมจำลอง
คุณสามารถเริ่มโปรแกรมจำลองให้ทำงานจนกว่าจะสิ้นสุดด้วยตนเอง หรือให้ทำงานตาม ระยะเวลาของสคริปต์การทดสอบที่กำหนด แล้วปิดโดยอัตโนมัติ
| คำสั่ง | คำอธิบาย | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| emulators:start | เริ่มโปรแกรมจำลองสำหรับผลิตภัณฑ์ Firebase ที่กำหนดค่าไว้ใน firebase.json
      กระบวนการของโปรแกรมจำลองจะทำงานต่อไปจนกว่าจะหยุดอย่างชัดเจน การเรียกใช้
      emulators:start จะดาวน์โหลดโปรแกรมจำลองไปยัง ~/.cache/firebase/emulators/ หาก
      ยังไม่ได้ติดตั้ง
        
  | 
  ||||||||||||||
| emulators:exec scriptpath | เรียกใช้สคริปต์ที่ scriptpath หลังจากเริ่มโปรแกรมจำลองสำหรับผลิตภัณฑ์ Firebase
      ที่กำหนดค่าไว้ใน firebase.json กระบวนการของโปรแกรมจำลองจะหยุดโดยอัตโนมัติเมื่อ
      สคริปต์ทำงานเสร็จแล้ว
       
  | 
โดยทั่วไปแล้ว วิธี firebase emulators:exec จะเหมาะกับเวิร์กโฟลว์การผสานรวมอย่างต่อเนื่องมากกว่า
ส่งออกและนำเข้าข้อมูลโปรแกรมจำลอง
คุณสามารถส่งออกข้อมูลจากโปรแกรมจำลอง Authentication, Cloud Firestore, Realtime Database และ Cloud Storage for Firebase เพื่อใช้เป็นชุดข้อมูลพื้นฐานทั่วไปที่แชร์ได้ คุณนำเข้าชุดข้อมูลเหล่านี้ได้โดยใช้แฟล็ก --import ตามที่อธิบายไว้ข้างต้น
| emulators:export export_directory | 
       
        Authentication, Cloud Firestore, Realtime Database หรือโปรแกรมจำลอง Cloud Storage for Firebase
        ส่งออกข้อมูลจากอินสแตนซ์โปรแกรมจำลอง Cloud Firestore, Realtime Database หรือ Cloud Storage for Firebase ที่กำลังทำงาน
        อยู่ ระบบจะสร้าง  
        คุณสามารถสั่งให้โปรแกรมจำลองส่งออกข้อมูลโดยอัตโนมัติเมื่อปิดเครื่องได้โดยใช้
          | 
  
ผสานรวมกับระบบ CI
การเรียกใช้อิมเมจชุดโปรแกรมจำลองที่สร้างโดยใช้คอนเทนเนอร์
การติดตั้งและกำหนดค่า Emulator Suite ด้วยคอนเทนเนอร์ในการตั้งค่า CI ทั่วไปนั้นทำได้ง่าย
ข้อควรทราบมีดังนี้
ระบบจะติดตั้งและแคชไฟล์ JAR ที่
~/.cache/firebase/emulators/- คุณอาจต้องเพิ่มเส้นทางนี้ลงในการกำหนดค่าแคช CI เพื่อหลีกเลี่ยงการดาวน์โหลดซ้ำ
 
หากไม่มีไฟล์
firebase.jsonในที่เก็บ คุณต้องเพิ่มอาร์กิวเมนต์บรรทัดคำสั่งลงในคำสั่งemulators:startหรือemulators:execเพื่อระบุว่าควรเริ่มต้นโปรแกรมจำลองใด เช่น--only functions,firestore
สร้างโทเค็นการตรวจสอบสิทธิ์ (เฉพาะโปรแกรมจำลองการโฮสต์)
หากเวิร์กโฟลว์การผสานรวมอย่างต่อเนื่องของคุณใช้ Firebase Hosting คุณจะต้อง
เข้าสู่ระบบโดยใช้โทเค็นเพื่อเรียกใช้ firebase emulators:exec 
ส่วนโปรแกรมจำลองอื่นๆ ไม่จำเป็นต้องเข้าสู่ระบบ
หากต้องการสร้างโทเค็น ให้เรียกใช้ firebase login:ci ในสภาพแวดล้อมในเครื่องของคุณ ซึ่งไม่ควรดำเนินการจากระบบ CI ทำตามวิธีการเพื่อตรวจสอบสิทธิ์ คุณควรทำขั้นตอนนี้เพียงครั้งเดียวต่อโปรเจ็กต์ เนื่องจากโทเค็นจะใช้ได้กับทุกบิลด์ คุณควรถือว่าโทเค็นเป็นเหมือนรหัสผ่านและเก็บโทเค็นไว้เป็นความลับ
หากสภาพแวดล้อม CI อนุญาตให้คุณระบุตัวแปรสภาพแวดล้อมที่ใช้ในสคริปต์บิลด์ได้ ให้สร้างตัวแปรสภาพแวดล้อมชื่อ FIREBASE_TOKEN โดยมีค่าเป็นสตริงโทเค็นการเข้าถึง Firebase CLI
จะเลือกตัวแปรสภาพแวดล้อม FIREBASE_TOKEN โดยอัตโนมัติและ
โปรแกรมจำลองจะเริ่มทำงานอย่างถูกต้อง
ในกรณีสุดท้าย คุณสามารถใส่โทเค็นในสคริปต์บิลด์ได้ แต่
โปรดตรวจสอบว่าบุคคลที่ไม่น่าเชื่อถือไม่มีสิทธิ์เข้าถึง สำหรับแนวทางที่ฮาร์ดโค้ดนี้
 คุณสามารถเพิ่ม --token "YOUR_TOKEN_STRING_HERE" ลงในคำสั่ง
firebase emulators:exec ได้
ใช้ REST API ของ Emulator Hub
แสดงรายการโปรแกรมจำลองที่กำลังทำงาน
หากต้องการแสดงรายการโปรแกรมจำลองที่กำลังทำงานอยู่ ให้ส่งคำขอ GET ไปยัง/emulators
ปลายทางของ Emulator Hub
curl localhost:4400/emulatorsผลลัพธ์จะเป็นออบเจ็กต์ JSON ที่แสดงรายการโปรแกรมจำลองทั้งหมดที่กำลังทำงานและการกำหนดค่าโฮสต์/พอร์ต เช่น
{
  "hub":{
    "name": "hub",
    "host": "localhost",
    "port": 4400
  },
  "functions": {
    "name": "functions",
    "host": "localhost",
    "port": 5001
  }
  "firestore": {
    "name": "firestore",
    "host": "localhost",
    "port": 8080
  }
}
เปิดใช้ / ปิดใช้ทริกเกอร์ฟังก์ชันในเบื้องหลัง
ในบางสถานการณ์ คุณจะต้องปิดใช้ฟังก์ชันในเครื่องและทริกเกอร์ส่วนขยายชั่วคราว เช่น คุณอาจต้องการลบข้อมูลทั้งหมดในCloud Firestoreโปรแกรมจำลองโดยไม่เรียกใช้ฟังก์ชัน onDelete ใดๆ ที่ทำงานในโปรแกรมจำลอง Cloud Functions หรือ Extensions
หากต้องการปิดใช้ทริกเกอร์ฟังก์ชันภายในชั่วคราว ให้ส่งคำขอ PUT ไปยังปลายทาง /functions/disableBackgroundTriggers ของ Emulator Hub
curl -X PUT localhost:4400/functions/disableBackgroundTriggersผลลัพธ์จะเป็นออบเจ็กต์ JSON ที่แสดงรายละเอียดสถานะปัจจุบัน
{
  "enabled": false
}
หากต้องการเปิดใช้ทริกเกอร์ฟังก์ชันภายในหลังจากที่ปิดใช้แล้ว ให้ส่งคำขอ PUT
ไปยังปลายทาง /functions/enableBackgroundTriggers ของ Emulator
Hub
curl -X PUT localhost:4400/functions/enableBackgroundTriggersผลลัพธ์จะเป็นออบเจ็กต์ JSON ที่แสดงรายละเอียดสถานะปัจจุบัน
{
  "enabled": true
}
การผสานรวม SDK ของโปรแกรมจำลอง
ตารางในส่วนนี้ระบุว่า SDK ของไคลเอ็นต์ และ Admin SDK รองรับโปรแกรมจำลองใดบ้าง ในอนาคตหมายความว่าเราวางแผนที่จะรองรับโปรแกรมจำลอง แต่ยังไม่พร้อมใช้งาน
ความพร้อมใช้งานของ Client SDK
| Android | แพลตฟอร์มของ Apple | เว็บ | 
        Firebase UI Android  | 
    
        Firebase UI iOS  | 
    
        Firebase UI เว็บ  | 
  |
|---|---|---|---|---|---|---|
| Realtime Database | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | อนาคต | ไม่มี | 
| Cloud Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | อนาคต | ไม่มี | 
| Authentication | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | อนาคต | 4.7.2 | 
| Cloud Storage for Firebase | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | ไม่มี | 
| Cloud Functions | 19.1.0 | 7.2.0 | 8.0.0 | ไม่มี | ไม่มี | ไม่มี | 
| Hosting | ไม่มี | ไม่มี | ไม่มี | ไม่มี | ไม่มี | ไม่มี | 
| Extensions | ไม่มี | ไม่มี | ไม่มี | ไม่มี | ไม่มี | ไม่มี | 
ความพร้อมใช้งานของ Admin SDK
| โหนด | Java | Python | Go | |
|---|---|---|---|---|
| Realtime Database | 8.6.0 | 6.10.0 | 2.18.0 | อนาคต | 
| Cloud Firestore | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 | 
| Authentication | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 | 
| Cloud Storage for Firebase | 9.8.0 | อนาคต | อนาคต | อนาคต | 
| Cloud Functions | ไม่มี | ไม่มี | ไม่มี | ไม่มี | 
| Hosting | ไม่มี | ไม่มี | ไม่มี | ไม่มี | 
| Extensions | ไม่มี | ไม่มี | ไม่มี | ไม่มี |