Menghubungkan aplikasi ke Emulator Cloud Storage for Firebase

Sebelum menghubungkan aplikasi ke emulator Cloud Storage for Firebase, pastikan bahwa Anda memahami keseluruhan alur kerja Firebase Local Emulator Suite, dan sudah menginstal serta mengonfigurasi Local Emulator Suite dan meninjau perintah CLI-nya.

Memilih project Firebase

Firebase Local Emulator Suite mengemulasi produk untuk satu project Firebase.

Untuk memilih project yang akan digunakan, sebelum memulai emulator, jalankan firebase use di CLI di direktori kerja Anda. Atau, Anda dapat meneruskan flag --project ke setiap perintah emulator.

Local Emulator Suite mendukung emulasi project Firebase sungguhan dan project demo.

Jenis project Fitur Penggunaan dengan emulator
Sungguhan

Project Firebase sungguhan adalah project yang Anda buat dan konfigurasikan (kemungkinan besar melalui Firebase console).

Project sungguhan memiliki resource live, seperti instance database, bucket penyimpanan, fungsi, atau resource lain yang Anda siapkan untuk project Firebase tersebut.

Jika mengerjakan project Firebase sungguhan, Anda dapat menjalankan emulator untuk salah satu atau semua produk yang didukung.

Untuk produk yang tidak diemulasi, aplikasi dan kode Anda akan berinteraksi dengan resource live (instance database, bucket penyimpanan, fungsi, dsb.).

Demo

Project Firebase demo tidak memiliki konfigurasi Firebase sungguhan dan tidak memiliki resource live. Project ini biasanya diakses melalui codelab atau tutorial lainnya.

Project ID untuk project demo memiliki awalan demo-.

Jika menggunakan project Firebase demo, aplikasi dan kode Anda hanya berinteraksi dengan emulator. Jika aplikasi Anda mencoba berinteraksi dengan resource yang tidak dijalankan dengan emulator, kode tersebut akan gagal.

Jika memungkinkan, sebaiknya gunakan project demo. Manfaatnya meliputi:

  • Penyiapan yang lebih mudah karena Anda dapat menjalankan emulator tanpa perlu membuat project Firebase
  • Keamanan yang lebih tangguh karena jika kode Anda tidak sengaja memanggil resource yang tidak diemulasi (production), tidak akan terjadi perubahan data, penggunaan, dan penagihan
  • Dukungan offline yang lebih baik karena Anda tidak perlu mengakses internet untuk mendownload konfigurasi SDK.

Melengkapi aplikasi untuk berkomunikasi dengan emulator

Android, platform Apple, dan Web SDK

Siapkan konfigurasi dalam aplikasi atau class pengujian untuk berinteraksi dengan emulator Cloud Storage for Firebase seperti berikut.

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);
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);
} 

Tidak diperlukan penyiapan tambahan untuk menguji Cloud Functions yang dipicu oleh peristiwa Cloud Storage for Firebase menggunakan emulator. Saat emulator Cloud Storage for Firebase dan Cloud Functions berjalan, keduanya otomatis bekerja sama.

Admin SDK dtk

Firebase Admin SDK akan otomatis terhubung ke emulator Cloud Storage for Firebase saat variabel lingkungan FIREBASE_STORAGE_EMULATOR_HOST ditetapkan:

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

Perlu diperhatikan bahwa emulator Cloud Functions otomatis mengenali emulator Cloud Storage for Firebase sehingga Anda dapat melewatkan langkah ini saat menguji integrasi antara emulator Cloud Functions dan Cloud Storage for Firebase Variabel lingkungan akan ditetapkan secara otomatis untuk Admin SDK di Cloud Storage for Firebase.

Jika ingin kode Admin SDK terhubung ke emulator bersama yang berjalan di lingkungan lain, Anda harus menentukan project ID yang sama dengan yang ditetapkan menggunakan Firebase CLI. Anda dapat meneruskan project ID ke initializeApp secara langsung atau menetapkan variabel lingkungan GCLOUD_PROJECT.

Admin SDK Node.js
admin.initializeApp({ projectId: "your-project-id" });
Variabel Lingkungan
export GCLOUD_PROJECT="your-project-id"

Mengimpor dan mengekspor data

Emulator database dan Cloud Storage for Firebase memungkinkan Anda mengekspor data dari instance emulator yang sedang berjalan. Tentukan set data dasar pengukuran yang akan digunakan dalam pengujian unit atau alur kerja continuous integration, lalu ekspor untuk dibagikan kepada tim.

firebase emulators:export ./dir

Dalam pengujian, impor data dasar pengukuran saat memulai emulator.

firebase emulators:start --import=./dir

Anda dapat menginstruksikan emulator untuk mengekspor data saat penonaktifan, baik dengan menentukan jalur ekspor maupun hanya menggunakan jalur yang diteruskan ke flag --import.

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

Opsi impor dan ekspor data ini juga berfungsi dengan perintah firebase emulators:exec. Untuk mempelajari lebih lanjut, baca referensi perintah emulator.

Perbedaan emulator Cloud Storage for Firebase dengan produksi

Untuk pengujian aplikasi klien, emulator Cloud Storage for Firebase selaras dengan produksi hampir secara sempurna dalam hal area permukaan Firebase API. Semua perintah Firebase diharapkan berfungsi di antara Firebase SDK reguler (Web, Android, dan platform Apple).

Untuk pengujian aplikasi sisi server, terdapat batasan. Firebase Admin SDK menggunakan permukaan Google Cloud API, dan tidak semua endpoint API ini diemulasikan. Prinsipnya, apa pun yang dapat dilakukan dari SDK klien (mengupload atau menghapus file, mendapatkan dan menyetel metadata) juga diterapkan untuk dapat digunakan dari Admin SDK, tetapi hal lain di luar itu tidak. Pengecualian penting dicantumkan di bawah ini.

Perbedaan dengan Google Cloud Storage

Produk Cloud Storage for Firebase, termasuk emulator Storage, menyediakan subset fungsi Google Cloud Storage (GCS) yang berfokus pada objek penyimpanan yang sangat berguna untuk mengembangkan aplikasi Firebase. Cloud Storage for Firebase berbeda dengan GCS dengan cara berikut:

  • Cloud Storage for Firebase saat ini tidak mendukung API Bucket untuk membuat, mencantumkan, mendapatkan, atau menghapus bucket penyimpanan.
  • Dari Google Cloud Storage Objects API, metode berikut didukung: copy, delete, get, insert, list, patch, rewrite, update.

Cloud IAM

Firebase Emulator Suite tidak berupaya mereplikasi atau mematuhi perilaku terkait IAM dalam beroperasi. Emulator mematuhi Aturan Keamanan Firebase yang diberikan, tetapi dalam situasi saat IAM biasanya digunakan, misalnya untuk menyetel akun layanan yang memanggil Cloud Functions serta izinnya, emulator tidak dapat dikonfigurasi dan akan menggunakan akun yang tersedia secara global di mesin developer Anda, seperti menjalankan skrip lokal secara langsung.

Notifikasi Pub/Sub

Emulator Cloud Storage for Firebase tidak terintegrasi dengan emulator Cloud Pub/Sub, sehingga tidak mendukung pembuatan saluran/notifikasi untuk perubahan objek penyimpanan. Sebaiknya gunakan pemicu Cloud Functions Storage secara langsung.

Metadata level bucket

Emulator Cloud Storage for Firebase tidak mendukung konfigurasi level bucket apa pun, termasuk kelas penyimpanan, konfigurasi CORS level bucket, label, atau kebijakan retensi. Firebase bermaksud meningkatkan dukungan ini dari waktu ke waktu.

Apa selanjutnya?