Hubungkan aplikasi Anda ke Cloud Storage Emulator

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

Pilih proyek Firebase

Firebase Local Emulator Suite mengemulasi produk untuk satu project Firebase.

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

Suite Emulator Lokal mendukung emulasi proyek Firebase nyata dan proyek demo .

Jenis proyek Fitur Gunakan dengan emulator
Nyata

Proyek Firebase yang sebenarnya adalah proyek yang Anda buat dan konfigurasikan (kemungkinan besar melalui konsol Firebase).

Proyek nyata memiliki sumber daya langsung, seperti instance database, keranjang penyimpanan, fungsi, atau sumber daya lain yang Anda siapkan untuk proyek Firebase tersebut.

Saat bekerja dengan proyek Firebase yang sebenarnya, Anda dapat menjalankan emulator untuk salah satu atau semua produk yang didukung.

Untuk produk apa pun yang tidak Anda tiru, aplikasi dan kode Anda akan berinteraksi dengan sumber daya langsung (instance database, keranjang penyimpanan, fungsi, dll.).

Demo

Proyek demo Firebase tidak memiliki konfigurasi Firebase nyata dan tidak ada sumber daya langsung. Proyek-proyek ini biasanya diakses melalui codelabs atau tutorial lainnya.

ID proyek untuk proyek demo memiliki awalan demo- .

Saat bekerja dengan proyek demo Firebase, aplikasi dan kode Anda hanya berinteraksi dengan emulator . Jika aplikasi Anda mencoba berinteraksi dengan sumber daya yang emulatornya tidak berjalan, kode itu akan gagal.

Kami menyarankan Anda menggunakan proyek demo sedapat mungkin. Manfaat meliputi:

  • Penyiapan lebih mudah, karena Anda dapat menjalankan emulator tanpa pernah membuat proyek Firebase
  • Keamanan yang lebih kuat, karena jika kode Anda secara tidak sengaja memanggil sumber daya (produksi) yang tidak ditiru, tidak ada kemungkinan perubahan data, penggunaan, dan penagihan
  • Dukungan offline yang lebih baik, karena tidak perlu mengakses internet untuk mengunduh konfigurasi SDK Anda.

Instrumen aplikasi Anda untuk berbicara dengan emulator

Android, platform Apple, dan SDK Web

Siapkan konfigurasi dalam aplikasi atau kelas pengujian Anda untuk berinteraksi dengan emulator Cloud Storage sebagai berikut.

Android
FirebaseStorage.getInstance().useEmulator('10.0.2.2', 9199);
Cepat
Storage.storage().useEmulator(withHost:"localhost", port:9199)
Web v8
var storage = firebase.storage();
storage.useEmulator("localhost", 9199);
Web v9
import { getStorage, connectStorageEmulator } from "firebase/storage";

const storage = getStorage();
connectStorageEmulator(storage, "localhost", 9199);

Tidak diperlukan penyiapan tambahan untuk menguji fungsi Cloud yang dipicu oleh peristiwa Cloud Storage menggunakan emulator. Saat emulator Cloud Storage dan Cloud Functions berjalan, keduanya secara otomatis bekerja bersama.

SDK Admin

Firebase Admin SDKs secara otomatis terhubung ke emulator Cloud Storage saat variabel lingkungan FIREBASE_STORAGE_EMULATOR_HOST disetel:

export FIREBASE_STORAGE_EMULATOR_HOST="localhost:9199"

Perhatikan bahwa emulator Cloud Functions secara otomatis mengetahui emulator Cloud Storage sehingga Anda dapat melewati langkah ini saat menguji integrasi antara Cloud Functions dan emulator Cloud Storage. Variabel lingkungan akan secara otomatis disetel untuk Admin SDK di Cloud Storage.

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

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

Impor dan ekspor data

Database dan emulator Cloud Storage memungkinkan Anda mengekspor data dari instance emulator yang sedang berjalan. Tentukan kumpulan data dasar untuk digunakan dalam pengujian unit atau alur kerja integrasi berkelanjutan, lalu ekspor untuk dibagikan di antara tim.

firebase emulators:export ./dir

Dalam pengujian, saat memulai emulator, impor data dasar.

firebase emulators:start --import=./dir

Anda dapat menginstruksikan emulator untuk mengekspor data saat dimatikan, baik dengan menentukan jalur ekspor atau cukup menggunakan jalur yang diteruskan ke tanda --import .

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

Opsi impor dan ekspor data ini juga berfungsi dengan perintah firebase emulators:exec . Untuk selengkapnya, lihat referensi perintah emulator .

Bagaimana emulator Cloud Storage berbeda dari produksi

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

Untuk pengujian aplikasi sisi server, ada batasan. Firebase Admin SDK menggunakan permukaan Google Cloud API, dan tidak semua titik akhir API ini diemulasi. Sebagai aturan praktis, apa pun yang dapat dilakukan dari SDK klien (mengunggah atau menghapus file, mendapatkan dan menyetel metadata) juga diterapkan untuk digunakan dari Admin SDK, tetapi apa pun di luar itu tidak. Pengecualian penting tercantum di bawah ini.

Cloud IAM

Firebase Emulator Suite tidak mencoba mereplikasi atau menghormati perilaku terkait IAM apa pun untuk dijalankan. Emulator mematuhi Aturan Keamanan Firebase yang disediakan, tetapi dalam situasi di mana IAM biasanya digunakan, misalnya untuk mengatur Cloud Functions yang memanggil akun layanan dan dengan demikian izin, emulator tidak dapat dikonfigurasi dan akan menggunakan akun yang tersedia secara global di mesin pengembang Anda, mirip dengan menjalankan skrip lokal secara langsung.

Pemberitahuan Pub/Sub

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

Metadata level bucket

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

Apa selanjutnya?