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

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

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

เดโม

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

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

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

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

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

ตรวจสอบแอปเพื่อสื่อสารกับโปรแกรมจำลอง

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

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

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

Admin SDK วินาที

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

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

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

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 กับเวอร์ชันที่ใช้งานจริง

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

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

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

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

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

Cloud IAM

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

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

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

ข้อมูลเมตาระดับ Bucket

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

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