Sebelum menghubungkan aplikasi ke emulator Cloud Storage for Firebase, pastikan 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 |
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 sebagai 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 fungsi Cloud 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
Firebase Admin SDK 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 emulator 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 emulator Cloud Storage for Firebase dapat Anda gunakan untuk 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 sejalan dengan produksi yang hampir secara sempurna terkait area platform 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?
- Untuk melihat kumpulan video pilihan dan contoh petunjuk mendetail, ikuti Playlist Pelatihan Emulator Firebase.
- Karena fungsi yang dipicu adalah integrasi standar dengan Cloud Storage for Firebase, pelajari lebih lanjut emulator Cloud Functions for Firebase di artikel Menjalankan fungsi secara lokal.