เชื่อมต่อแอปของคุณกับ Cloud Storage สำหรับ Firebase Emulator

ก่อนที่จะเชื่อมต่อแอปของคุณกับ Cloud Storage สำหรับโปรแกรมจำลอง Firebase ตรวจสอบให้แน่ใจว่าคุณ เข้าใจเวิร์กโฟลว์ 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 จริง และไม่มีทรัพยากรที่ใช้งานจริง โดยปกติจะเข้าถึงโปรเจ็กต์เหล่านี้ได้ผ่านทาง Codelab หรือบทช่วยสอนอื่นๆ

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

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

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

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

ติดตั้งแอปของคุณเพื่อพูดคุยกับโปรแกรมจำลอง

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

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

Kotlin+KTX
// 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);
สวิฟท์
Storage.storage().useEmulator(withHost: "127.0.0.1", port: 9199)

Web modular API

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 namespaced API

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

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

SDK ผู้ดูแลระบบ

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

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

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

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

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

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

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

firebase emulators:export ./dir

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

firebase emulators:start --import=./dir

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

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

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

โปรแกรมจำลอง Cloud Storage สำหรับ Firebase แตกต่างจากเวอร์ชันที่ใช้งานจริงอย่างไร

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

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

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

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

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

คลาวด์ไอเอเอ็ม

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

การแจ้งเตือนผับ/ย่อย

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

ข้อมูลเมตาระดับที่เก็บข้อมูล

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

อะไรต่อไป?

  • หากต้องการชุดวิดีโอที่ได้รับการดูแลจัดการและตัวอย่างวิธีการโดยละเอียด โปรดทำตาม เพลย์ลิสต์การฝึกอบรม Firebase Emulators
  • เนื่องจากฟังก์ชันที่ทริกเกอร์เป็นการผสานรวมทั่วไปกับ Cloud Storage สำหรับ Firebase เรียนรู้เพิ่มเติมเกี่ยวกับฟังก์ชันคลาวด์สำหรับโปรแกรมจำลอง Firebase ที่ ฟังก์ชัน Run ในเครื่อง