เชื่อมต่อแอปกับโปรแกรมจำลอง Realtime Database

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

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

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

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

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

ประเภทโปรเจ็กต์ ฟีเจอร์ ใช้กับโปรแกรมจำลอง
จริง

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

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

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

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

สาธิต

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

รหัสโปรเจ็กต์สำหรับโปรเจ็กต์สาธิตจะมีคำนำหน้า demo-

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

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

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

กำหนดค่าแอปให้สื่อสารกับโปรแกรมจำลอง

SDK ของแพลตฟอร์ม Android, Apple และเว็บ

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

Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val database = Firebase.database
database.useEmulator("10.0.2.2", 9000)
Java
// 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://127.0.0.1:9000?ns=YOUR_DATABASE_NAMESPACE")

Web

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

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

Web

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

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

Admin SDK

Firebase Admin SDKs จะเชื่อมต่อกับโปรแกรมจำลอง Realtime Database โดยอัตโนมัติเมื่อ ตั้งค่าตัวแปรสภาพแวดล้อม FIREBASE_DATABASE_EMULATOR_HOST ดังนี้

export FIREBASE_DATABASE_EMULATOR_HOST="127.0.0.1:9000"

หากโค้ดทำงานภายในโปรแกรมจำลอง Cloud Functions ระบบจะตั้งค่ารหัสโปรเจ็กต์ และการกำหนดค่าอื่นๆ โดยอัตโนมัติเมื่อเรียกใช้ initializeApp

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

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

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

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

Kotlin
// With a DatabaseReference, write null to clear the database.
database.reference.setValue(null)
Java
// 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

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

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

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

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

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

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

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>

ฉันควรทำอย่างไรต่อไป