Uygulamanızı Firebase için Cloud Storage Emulator'a bağlayın

Uygulamanızı Cloud Storage for Firebase emülatörüne bağlamadan önce genel Firebase Local Emulator Suite iş akışını anladığınızdan, Local Emulator Suite aracını yükleyip yapılandırdığınızdan ve CLI komutlarını incelediğinizden emin olun.

Firebase projesi seçme

Firebase Local Emulator Suite, tek bir Firebase projesi için ürünleri emüle eder.

Kullanılacak projeyi seçmek için emülatörleri başlatmadan önce KSA'da çalışma dizininizde firebase use komutunu çalıştırın. Alternatif olarak, her emülatör komutuna --project işaretini iletebilirsiniz.

Local Emulator Suite, gerçek Firebase projelerinin ve demo projelerin emülasyonunu destekler.

Proje türü Özellikler Emülatörlerle kullanma
Real

Gerçek bir Firebase projesi, oluşturduğunuz ve yapılandırdığınız (büyük olasılıkla Firebase konsolu üzerinden) bir projedir.

Gerçek projelerde veritabanı örnekleri, depolama paketleri, işlevler veya söz konusu Firebase projesi için ayarladığınız diğer kaynaklar gibi canlı kaynaklar bulunur.

Gerçek Firebase projeleriyle çalışırken desteklenen ürünlerin herhangi biri veya tümü için emülatör çalıştırabilirsiniz.

Emüle etmediğiniz ürünler için uygulamalarınız ve kodunuz canlı kaynakla (veritabanı örneği, depolama alanı paketi, işlev vb.) etkileşim kurar.

Demo

Demo Firebase projesinde gerçek Firebase yapılandırması ve canlı kaynaklar yoktur. Bu projelere genellikle codelab'ler veya diğer eğitimler üzerinden erişilir.

Demo projelerinin proje kimliklerinde demo- ön eki bulunur.

Demo Firebase projeleriyle çalışırken uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşim kurar. Uygulamanız, emülatörün çalışmadığı bir kaynakla etkileşim kurmaya çalışırsa bu kod başarısız olur.

Mümkün olduğunda demo projeleri kullanmanızı öneririz. Sunulan avantajlar arasında şunlar sayılabilir:

  • Firebase projesi oluşturmadan emülatörleri çalıştırabildiğiniz için daha kolay kurulum
  • Kodunuz yanlışlıkla emüle edilmemiş (üretim) kaynakları çağırırsa veri değişikliği, kullanım ve faturalandırma olasılığı olmadığından daha güçlü güvenlik
  • SDK yapılandırmanızı indirmek için internete erişmeniz gerekmediğinden daha iyi çevrimdışı destek sunulur.

Uygulamanızı emülatörlerle iletişim kuracak şekilde yapılandırma

Android, Apple platformları ve web SDK'ları

Uygulama içi yapılandırmanızı veya test sınıflarınızı Cloud Storage for Firebase emülatörüyle etkileşim kuracak şekilde aşağıdaki gibi ayarlayın.

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)
Unity
FirebaseStorage storage = FirebaseStorage.DefaultInstance;
// Connects to the Storage Emulator running on port 9199
storage.UseEmulator("127.0.0.1", 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);
} 

Öykünücüyü kullanarak Cloud Storage for Firebase etkinlikleri tarafından tetiklenen Cloud Functions işlevlerini test etmek için ek kurulum gerekmez. Cloud Storage for Firebase ve Cloud Functions emülatörleri çalışırken otomatik olarak birlikte çalışır.

Admin SDK

FIREBASE_STORAGE_EMULATOR_HOST ortam değişkeni ayarlandığında Firebase Admin SDK, Cloud Storage for Firebase emülatörüne otomatik olarak bağlanır:

export FIREBASE_STORAGE_EMULATOR_HOST="127.0.0.1:9199"

Cloud Functions emülatörü, Cloud Storage for Firebase emülatörünü otomatik olarak algılar. Bu nedenle, Cloud Functions ve Cloud Storage for Firebase emülatörleri arasındaki entegrasyonları test ederken bu adımı atlayabilirsiniz. Ortam değişkeni, Cloud Storage for Firebase içinde Admin SDK için otomatik olarak ayarlanır.

Admin SDK kodunuzun başka bir ortamda çalışan paylaşılan bir emülatöre bağlanmasını istiyorsanız Firebase CLI'yı kullanarak ayarladığınız proje kimliğini belirtmeniz gerekir. Proje kimliğini doğrudan initializeApp aracına iletebilir veya GCLOUD_PROJECT ortam değişkenini ayarlayabilirsiniz.

Node.js Admin SDK
admin.initializeApp({ projectId: "your-project-id" });
Ortam Değişkeni
export GCLOUD_PROJECT="your-project-id"

Verileri içe ve dışa aktarma

Veritabanı ve Cloud Storage for Firebase emülatörleri, çalışan bir emülatör örneğinden veri aktarmanıza olanak tanır. Birim testlerinizde veya sürekli entegrasyon iş akışlarınızda kullanmak üzere bir temel veri kümesi tanımlayın ve ardından bunu ekiple paylaşmak üzere dışa aktarın.

firebase emulators:export ./dir

Testlerde, emülatör başlatıldığında referans verileri içe aktarın.

firebase emulators:start --import=./dir

Emülatöre, kapatma sırasında verileri dışa aktarmasını söyleyebilirsiniz. Bunun için bir dışa aktarma yolu belirtebilir veya --import işaretine iletilen yolu kullanabilirsiniz.

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

Bu veri içe ve dışa aktarma seçenekleri firebase emulators:exec komutuyla da çalışır. Daha fazla bilgi için emülatör komut referansına bakın.

Cloud Storage for Firebase emülatörünün üretimden farkı

İstemci uygulamalarını test etmek için Cloud Storage for Firebase emülatörü, Firebase API yüzey alanı açısından üretimle neredeyse mükemmel bir şekilde uyum sağlar. Tüm Firebase komutlarının normal Firebase SDK'ları (web, Android ve Apple platformları) arasında çalışması beklenir.

Sunucu tarafı uygulamaların test edilmesiyle ilgili sınırlamalar vardır. Firebase Admin SDK'ları Google Cloud API yüzeyini kullanır ve bu API'nin tüm uç noktaları emüle edilmez. Genel bir kural olarak, istemci SDK'larından yapılabilen her şey (dosya yükleme veya silme, meta veri alma ve ayarlama) Yönetici SDK'larından kullanılmak üzere de uygulanır ancak bunun ötesindeki hiçbir şey uygulanmaz. Önemli istisnalar aşağıda listelenmiştir.

Google Cloud Storage'dan farkları

Storage emülatörü de dahil olmak üzere Cloud Storage for Firebase ürünü, Google Cloud Storage (GCS) işlevlerinin depolama nesnelerine odaklanan bir alt kümesini sunar. Bu işlevler, Firebase uygulamaları geliştirirken oldukça faydalıdır. Cloud Storage for Firebase GCS'den şu yönleriyle farklıdır:

  • Cloud Storage for Firebase, depolama alanı paketleri oluşturma, listeleme, alma veya silme için Bucket API'lerini şu anda desteklemiyor.
  • Google Cloud Storage Objects API'den şu yöntemler desteklenir: copy, delete, get, insert, list, patch, rewrite, update.

Cloud IAM

Firebase Emulator Suite, çalıştırma için IAM ile ilgili herhangi bir davranışı kopyalamaya veya dikkate almaya çalışmaz. Emülatörler, sağlanan Firebase Güvenlik Kuralları'na uyar ancak normalde IAM'nin kullanılacağı durumlarda (örneğin, Cloud Functions'ı çağıracak hizmet hesabını ve dolayısıyla izinleri ayarlamak için) emülatör yapılandırılamaz ve geliştirici makinenizdeki genel olarak kullanılabilir hesabı kullanır. Bu, yerel bir komut dosyasını doğrudan çalıştırmaya benzer.

Pub/Sub bildirimleri

Cloud Storage for Firebase emülatörü, Cloud Pub/Sub emülatörüyle entegre olmadığından depolama alanı nesnesi değişiklikleri için kanal/bildirim oluşturmayı desteklemez. Cloud Functions Storage tetikleyicilerini doğrudan kullanmanızı öneririz.

Paket düzeyinde meta veriler

Cloud Storage for Firebase emülatörü; depolama sınıfı, kova düzeyinde CORS yapılandırması, etiketler veya saklama politikaları dahil olmak üzere kova düzeyinde yapılandırmaları desteklemez. Firebase, bu desteği zaman içinde geliştirmeyi planlamaktadır.

Sonrasında ne olacak?