เชื่อมต่อแอปกับโปรแกรมจำลอง Cloud Storage for Firebase

ก่อนเชื่อมต่อแอปกับ Cloud Storage for Firebase Emulator โปรดตรวจสอบ ว่าคุณ เข้าใจเวิร์กโฟลว์โดยรวมของ 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

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

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

ตั้งค่าการกำหนดค่าในแอปหรือคลาสทดสอบให้โต้ตอบกับ Cloud Storage for Firebase Emulator ดังนี้

Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val storage = Firebase.storage
storage.useEmulator("10.0.2.2", 9199)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseStorage storage = FirebaseStorage.getInstance();
storage.useEmulator("10.0.2.2", 9199);
Swift
Storage.storage().useEmulator(withHost: "127.0.0.1", port: 9199)

Web

const { getStorage, connectStorageEmulator } = require("firebase/storage");

const storage = getStorage();
if (location.hostname === "localhost") {
  // Point to the Storage emulator running on localhost.
  connectStorageEmulator(storage, "127.0.0.1", 9199);
} 

Web

var storage = firebase.storage();
if (location.hostname === "localhost") {
  // Point to the Storage emulator running on localhost.
  storage.useEmulator("127.0.0.1", 9199);
} 

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

Admin SDK

Firebase Admin SDKs จะเชื่อมต่อกับ Cloud Storage for Firebase emulator โดยอัตโนมัติเมื่อมีการตั้งค่าตัวแปรสภาพแวดล้อม FIREBASE_STORAGE_EMULATOR_HOST

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

โปรดทราบว่า Cloud Functions Emulator จะรู้จัก Cloud Storage for Firebase Emulator โดยอัตโนมัติ ดังนั้นคุณจึงข้ามขั้นตอนนี้ได้เมื่อทดสอบ การผสานรวมระหว่าง Cloud Functions กับ Cloud Storage for Firebase Emulator ระบบจะตั้งค่าตัวแปรสภาพแวดล้อมสำหรับ Admin SDK ใน Cloud Storage for Firebase โดยอัตโนมัติ

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

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

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

โปรแกรมจำลองฐานข้อมูลและ 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 ด้วย ดูข้อมูลเพิ่มเติมได้ที่ ข้อมูลอ้างอิงคำสั่งโปรแกรมจำลอง

Cloud Storage for Firebase Emulator แตกต่างจากการใช้งานจริงอย่างไร

สำหรับการทดสอบแอปไคลเอ็นต์ Cloud Storage for Firebase emulator จะสอดคล้องกับการใช้งานจริงเกือบทั้งหมดในส่วนของ Firebase API คำสั่ง Firebase ทั้งหมดควรทำงานได้ระหว่าง Firebase SDK ปกติ (เว็บ, Android และแพลตฟอร์ม Apple)

สำหรับการทดสอบแอปฝั่งเซิร์ฟเวอร์จะมีข้อจำกัด Firebase Admin SDKs ใช้ส่วนของ Google Cloud API และไม่ได้จำลองปลายทางทั้งหมดของ API นี้ โดยทั่วไปแล้ว สิ่งที่ทำได้จาก Client SDK (การอัปโหลดหรือลบไฟล์ การรับและการตั้งค่าข้อมูลเมตา) จะมีการนำไปใช้จาก Admin SDK ด้วย แต่จะไม่มีการนำไปใช้กับสิ่งอื่นๆ การยกเว้นที่สำคัญมีดังนี้

ความแตกต่างจาก Google Cloud Storage

ผลิตภัณฑ์ Cloud Storage for Firebase ซึ่งรวมถึง Storage Emulator มี ฟังก์ชันการทำงานของ Google Cloud Storage (GCS) ที่เน้นออบเจ็กต์พื้นที่เก็บข้อมูล ซึ่งมีประโยชน์มากสำหรับการพัฒนาแอป Firebase Cloud Storage for Firebase แตกต่างจาก GCS ดังนี้

  • Cloud Storage for Firebase ไม่รองรับ API Bucket สำหรับ การสร้าง แสดงรายการ รับ หรือลบบัคเก็ตพื้นที่เก็บข้อมูล
  • API ออบเจ็กต์ Google Cloud Storage รองรับเมธอดต่อไปนี้ copy, delete, get, insert, list, patch, rewrite, update.

Cloud IAM

Firebase Emulator Suite ไม่พยายามจำลองหรือปฏิบัติตามลักษณะการทำงานที่เกี่ยวข้องกับ IAM สำหรับการทำงาน โปรแกรมจำลองจะปฏิบัติตามกฎการรักษาความปลอดภัยของ Firebase ที่ให้ไว้ แต่ในสถานการณ์ที่โดยปกติแล้วจะมีการใช้ IAM เช่น เพื่อตั้งค่าบัญชีบริการที่เรียกใช้ Cloud Functions และสิทธิ์ต่างๆ โปรแกรมจำลองจะกำหนดค่าไม่ได้และจะใช้บัญชีที่ใช้งานได้ทั่วโลกในเครื่องของนักพัฒนาแอป ซึ่งคล้ายกับการเรียกใช้สคริปต์ภายในเครื่องโดยตรง

การแจ้งเตือน Pub/Sub

Cloud Storage for Firebase Emulator ไม่ผสานรวมกับ Cloud Pub/Sub Emulator จึงไม่รองรับการสร้าง แชแนล/การแจ้งเตือนสำหรับการเปลี่ยนแปลงออบเจ็กต์พื้นที่เก็บข้อมูล เราขอแนะนำให้ใช้ Cloud Functionsทริกเกอร์พื้นที่เก็บข้อมูลโดยตรง

ข้อมูลเมระดับบัคเก็ต

Cloud Storage for Firebase Emulator ไม่รองรับการกำหนดค่าระดับบัคเก็ต ซึ่งรวมถึงคลาสพื้นที่เก็บข้อมูล, การกำหนดค่า CORS ระดับบัคเก็ต, ป้ายกำกับ หรือนโยบายการเก็บรักษา Firebase มีแผนที่จะปรับปรุงการรองรับนี้ในอนาคต

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