เชื่อมต่อแอพของคุณกับ Realtime Database Emulator

ก่อนเชื่อมต่อแอปของคุณกับโปรแกรมจำลองฐานข้อมูลเรียลไทม์ ตรวจสอบให้แน่ใจว่าคุณ เข้าใจเวิร์กโฟลว์ Firebase Local Emulator Suite โดยรวม และคุณ ติดตั้งและกำหนดค่า Local Emulator Suite และตรวจสอบ คำสั่ง CLI

เลือกโปรเจ็กต์ Firebase

Firebase Local Emulator Suite จำลองผลิตภัณฑ์สำหรับโปรเจ็กต์ Firebase เดียว

ในการเลือกโปรเจ็กต์ที่จะใช้ ก่อนที่คุณจะเริ่มอีมูเลเตอร์ ใน CLI ให้รัน firebase use ในไดเร็กทอรีการทำงานของคุณ หรือคุณสามารถส่ง --project แฟล็กไปยังแต่ละคำสั่งอีมูเลเตอร์

Local Emulator Suite รองรับการจำลองโปรเจ็กต์ Firebase จริง และโปรเจ็กต์ สาธิต

ประเภทโครงการ คุณสมบัติ ใช้กับอีมูเลเตอร์
จริง

โปรเจ็กต์ Firebase จริงคือโปรเจ็กต์ที่คุณสร้างและกำหนดค่า (ส่วนใหญ่ผ่านคอนโซล Firebase)

โปรเจ็กต์จริงมีทรัพยากรจริง เช่น อินสแตนซ์ฐานข้อมูล ที่เก็บข้อมูลของพื้นที่เก็บข้อมูล ฟังก์ชัน หรือทรัพยากรอื่นๆ ที่คุณตั้งค่าสำหรับโปรเจ็กต์ Firebase นั้น

เมื่อทำงานกับโปรเจ็กต์ Firebase จริง คุณสามารถเรียกใช้โปรแกรมจำลองสำหรับผลิตภัณฑ์ที่รองรับใดๆ หรือทั้งหมดได้

สำหรับผลิตภัณฑ์ใดๆ ที่คุณไม่ได้จำลอง แอปและโค้ดของคุณจะโต้ตอบกับทรัพยากรที่ใช้งาน อยู่ (อินสแตนซ์ฐานข้อมูล ที่เก็บข้อมูล ฟังก์ชัน ฯลฯ)

การสาธิต

โปรเจ็กต์ Firebase สาธิตไม่มีการกำหนดค่า Firebase จริง และไม่มีทรัพยากรจริง โครงการเหล่านี้มักจะเข้าถึงได้ผ่าน codelabs หรือบทช่วยสอนอื่นๆ

รหัสโครงการสำหรับโครงการสาธิตมี demo- หน้าการสาธิต

เมื่อทำงานกับโปรเจ็กต์สาธิต Firebase แอปและโค้ดของคุณจะโต้ตอบกับอีมูเลเตอร์ เท่านั้น หากแอปของคุณพยายามโต้ตอบกับทรัพยากรที่ไม่ได้ใช้งานโปรแกรมจำลอง โค้ดนั้นจะล้มเหลว

เราขอแนะนำให้คุณใช้โปรเจ็กต์สาธิตในทุกที่ที่ทำได้ ประโยชน์รวมถึง:

  • ตั้งค่าได้ง่ายขึ้น เนื่องจากคุณสามารถเรียกใช้โปรแกรมจำลองได้โดยไม่ต้องสร้างโปรเจ็กต์ Firebase เลย
  • ความปลอดภัยที่เข้มงวดยิ่งขึ้น เนื่องจากหากรหัสของคุณเรียกใช้ทรัพยากรที่ไม่ได้จำลอง (การผลิต) โดยไม่ได้ตั้งใจ จะไม่มีโอกาสเปลี่ยนแปลงข้อมูล การใช้งาน และการเรียกเก็บเงิน
  • การสนับสนุนออฟไลน์ที่ดีขึ้น เนื่องจากไม่จำเป็นต้องเข้าถึงอินเทอร์เน็ตเพื่อดาวน์โหลดการกำหนดค่า SDK ของคุณ

เครื่องมือแอปของคุณเพื่อพูดคุยกับอีมูเลเตอร์

Android, แพลตฟอร์ม Apple และ Web SDK

ตั้งค่าคอนฟิกในแอปหรือคลาสทดสอบเพื่อโต้ตอบกับ Realtime Database ดังนี้

Android
        // 10.0.2.2 is the special IP address to connect to the 'localhost' of
        // the host computer from an Android emulator.
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        database.useEmulator("10.0.2.2", 9000);
Swift
    // In almost all cases the ns (namespace) is your project ID.
let db = Database.database(url:"http://localhost:9000?ns=YOUR_DATABASE_NAMESPACE")

Web version 9

import { getDatabase, connectDatabaseEmulator } from "firebase/database";

const db = getDatabase();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  connectDatabaseEmulator(db, "localhost", 9000);
} 

Web version 8

var db = firebase.database();
if (location.hostname === "localhost") {
  // Point to the RTDB emulator running on localhost.
  db.useEmulator("localhost", 9000);
} 

ไม่จำเป็นต้องตั้งค่าเพิ่มเติมเพื่อทดสอบ Cloud Function ที่ท ริกเกอร์โดยเหตุการณ์ฐานข้อมูลเรียลไทม์ โดยใช้โปรแกรมจำลอง เมื่อทั้ง Realtime Database และ Cloud Functions emulators ทำงานอยู่ ทั้งคู่จะทำงานร่วมกันโดยอัตโนมัติ

Admin SDKs

Firebase Admin SDK เชื่อมต่อกับโปรแกรมจำลองฐานข้อมูลเรียลไทม์โดยอัตโนมัติเมื่อตั้งค่าตัวแปรสภาพแวดล้อม FIREBASE_DATABASE_EMULATOR_HOST :

export FIREBASE_DATABASE_EMULATOR_HOST="localhost:9000"

หากโค้ดของคุณกำลังทำงานอยู่ในโปรแกรมจำลอง Cloud Functions ID โปรเจ็กต์ของคุณและการกำหนดค่าอื่นๆ จะถูกตั้งค่าโดยอัตโนมัติเมื่อเรียก initalizeApp

หากคุณต้องการให้โค้ด Admin SDK เชื่อมต่อกับโปรแกรมจำลองที่ใช้ร่วมกันที่ทำงานในสภาพแวดล้อมอื่น คุณจะต้องระบุ รหัสโปรเจ็กต์เดียวกันกับที่คุณตั้งค่าโดยใช้ Firebase CLI คุณสามารถส่งรหัสโปรเจ็กต์เพื่อ initializeApp แอปโดยตรงหรือตั้งค่าตัวแปรสภาพแวดล้อม GCLOUD_PROJECT

Node.js ผู้ดูแลระบบ SDK
admin.initializeApp({ projectId: "your-project-id" });
ตัวแปรสภาพแวดล้อม
export GCLOUD_PROJECT="your-project-id"

ล้างฐานข้อมูลของคุณระหว่างการทดสอบ

หากต้องการล้างฐานข้อมูลเรียลไทม์ระหว่างกิจกรรม คุณสามารถล้างข้อมูลอ้างอิงฐานข้อมูลได้ คุณสามารถใช้วิธีนี้เป็นทางเลือกแทนการปิดกระบวนการจำลอง

Android
// With a DatabaseReference, write null to clear the database.
database.getReference().setValue(null);
Swift
// With a DatabaseReference, write nil to clear the database.
    Database.database().reference().setValue(nil);

Web version 9

import { getDatabase, ref, set } from "firebase/database";

// With a database Reference, write null to clear the database.
const db = getDatabase();
set(ref(db), null);

Web version 8

// With a database Reference, write null to clear the database.
firebase.database().ref().set(null);

โดยปกติ รหัสของคุณควรรอการยืนยันว่าการล้างข้อมูลเสร็จสิ้นหรือล้มเหลวโดยใช้คุณลักษณะการจัดการเหตุการณ์แบบอะซิงโครนัสของแพลตฟอร์มของคุณ

เมื่อดำเนินการตามขั้นตอนเช่นนี้แล้ว คุณสามารถจัดลำดับการทดสอบและทริกเกอร์ฟังก์ชันของคุณด้วยความมั่นใจว่าข้อมูลเก่าจะถูกล้างระหว่างการรัน และคุณกำลังใช้การกำหนดค่าการทดสอบพื้นฐานใหม่

นำเข้าและส่งออกข้อมูล

ฐานข้อมูลและโปรแกรมจำลอง Cloud Storage ช่วยให้คุณสามารถส่งออกข้อมูลจากอินสแตนซ์ของโปรแกรมจำลองที่ทำงานอยู่ กำหนดชุดข้อมูลพื้นฐานเพื่อใช้ในการทดสอบหน่วยหรือเวิร์กโฟลว์การรวมอย่างต่อเนื่อง จากนั้นส่งออกเพื่อแชร์ระหว่างทีม

firebase emulators:export ./dir

ในการทดสอบ เมื่อเริ่มต้นโปรแกรมจำลอง ให้นำเข้าข้อมูลพื้นฐาน

firebase emulators:start --import=./dir

คุณสามารถสั่งให้อีมูเลเตอร์เอ็กซ์พอร์ตข้อมูลเมื่อปิดระบบ ไม่ว่าจะระบุพาธเอ็กซ์พอร์ตหรือเพียงแค่ใช้พาธที่ส่งผ่านไปยังแฟ --import

firebase emulators:start --import=./dir --export-on-exit

ตัวเลือกการนำเข้าและส่งออกข้อมูลเหล่านี้ใช้ได้กับคำสั่ง firebase emulators:exec เช่นกัน สำหรับข้อมูลเพิ่มเติม โปรดดูการ อ้างอิงคำสั่งอีมู เลเตอร์

เห็นภาพกิจกรรมกฎความปลอดภัย

ในขณะที่คุณทำงานผ่านต้นแบบและลูปการทดสอบ คุณสามารถใช้เครื่องมือการแสดงภาพและรายงานที่จัดเตรียมโดย Local Emulator Suite

เห็นภาพการประเมินกฎ

เมื่อคุณเพิ่มกฎความปลอดภัยให้กับต้นแบบของคุณ คุณสามารถแก้ไขจุดบกพร่องได้ด้วยเครื่องมือ Local Emulator Suite

หลังจากเรียกใช้ชุดการทดสอบแล้ว คุณจะเข้าถึงรายงานความครอบคลุมการทดสอบที่แสดงว่ากฎแต่ละข้อได้รับการประเมินอย่างไร หากต้องการรับรายงาน ให้สอบถามปลายทางที่เปิดเผยบนโปรแกรมจำลองขณะทำงาน สำหรับเวอร์ชันที่เป็นมิตรกับเบราว์เซอร์ ให้ใช้ URL ต่อไปนี้:

http://localhost:9000/.inspect/coverage?ns=<database_name>

สิ่งนี้แบ่งกฎของคุณออกเป็นนิพจน์และนิพจน์ย่อยที่คุณสามารถวางเมาส์ไว้เพื่อดูข้อมูลเพิ่มเติม ซึ่งรวมถึงจำนวนการดำเนินการและค่าที่ส่งคืน สำหรับข้อมูลเวอร์ชัน JSON ดิบ ให้รวม URL ต่อไปนี้ในการสืบค้นของคุณ:

http://localhost:9000/.inspect/coverage.json?ns=<database_name>

อะไรต่อไป?