Firebase Local Emulator Suite, farklı prototip ve test ortamları için (tek seferlik prototip oluşturma oturumlarından üretim ölçekli sürekli entegrasyon iş akışlarına kadar) yüklenebilir ve yapılandırılabilir.
Local Emulator Suite'i yükleme
Emulator Suite'i yüklemeden önce şunlara ihtiyacınız vardır:
Emulator Suite'i yüklemek için:
- Firebase CLI'yı yükleyin.
    Firebase CLI'yi henüz yüklemediyseniz hemen yükleyin.
    Emulator Suite'i kullanmak için CLI 8.14.0 veya sonraki bir sürümüne sahip olmanız gerekir. Aşağıdaki komutu kullanarak hangi sürümü yüklediğinizi kontrol edebilirsiniz:
    firebase --version 
- Henüz yapmadıysanız hangi ürünlerin kullanılacağını belirtmek için ekrandaki istemleri izleyerek geçerli çalışma dizinini Firebase projesi olarak başlatın:
    firebase init 
- Emulator Suite'i ayarlayın. Bu komut, ilgilendiğiniz emülatörleri seçmenize, ilgili emülatör ikili dosyalarını indirmenize ve varsayılanlar uygun değilse emülatör bağlantı noktalarını ayarlamanıza olanak tanıyan bir yapılandırma sihirbazı başlatır.
    firebase init emulators 
Bir emülatör yüklendikten sonra, Firebase CLI sürümünüzü güncelleyene kadar güncelleme kontrolü yapılmaz ve ek otomatik indirme işlemi gerçekleşmez.
Emulator Suite'i yapılandırma
İsteğe bağlı olarak, firebase.json dosyasında emülatörlerin ağ bağlantı noktalarını ve Güvenlik Kuralları tanımlarının yolunu yapılandırabilirsiniz:
- firebase init emulatorskomutunu çalıştırarak veya- firebase.jsondosyasını manuel olarak düzenleyerek emülatör bağlantı noktalarını değiştirin.
- firebase.jsondüzenleyerek Güvenlik Kuralları tanımlarının yolunu manuel olarak değiştirin.
Bu ayarları yapılandırmazsanız emülatörler varsayılan bağlantı noktalarını dinler ve Cloud Firestore, Realtime Database ve Cloud Storage for Firebase emülatörleri açık veri güvenliğiyle çalışır.
| Komut | Açıklama | 
|---|---|
| init emulators | Emülatör başlatma sihirbazını başlatın. Yüklenecek emülatörleri belirleyin ve isteğe bağlı olarak emülatör bağlantı noktası ayarlarını belirtin. init emulators, mevcut yapılandırmayı bozmaz. Varsayılanları kabul ettiğinizde mevcut emülatör yapılandırması korunur. | 
Bağlantı noktası yapılandırması
Her emülatör, makinenizde tercih edilen varsayılan değerle farklı bir bağlantı noktasına bağlanır.
| Emülatör | Varsayılan Bağlantı Noktası | 
|---|---|
| Authentication | 9099 | 
| App Hosting | 5002 | 
| Emulator Suite UI | 4.000 | 
| Cloud Functions | 5001 | 
| Eventarc | 9299 | 
| Realtime Database | 9000 | 
| Cloud Firestore | 8080 | 
| Cloud Storage for Firebase | 9199 | 
| Firebase Hosting | 5000 | 
| Pub/Sub | 8085 | 
Proje kimliği yapılandırması
Emülatörleri nasıl çağırdığınıza bağlı olarak, farklı Firebase proje kimlikleri kullanarak bir emülatörün birden fazla örneğini veya belirli bir proje kimliği için birden fazla emülatör örneğini çalıştırabilirsiniz. Bu gibi durumlarda, emülatör örnekleri ayrı bir ortamda çalışır.
Genel olarak, tüm emülatör çağırmaları için tek bir proje kimliği ayarlamak iyi bir uygulamadır. Böylece Emulator Suite UI, farklı ürün emülatörleri ve belirli bir emülatörün çalışan tüm örnekleri her durumda doğru şekilde iletişim kurabilir.
Local Emulator Suite, ortamda birden fazla proje kimliği algıladığında uyarılar yayınlar. Ancak firebase.json dosyanızda singleProjectMode anahtarını false olarak ayarlayarak bu davranışı geçersiz kılabilirsiniz.
Proje kimliği beyanlarındaki uyuşmazlıkları şu yerlerde kontrol edebilirsiniz:
- Komut satırındaki varsayılan proje. Varsayılan olarak, proje kimliği başlangıçta firebase initveyafirebase useile seçilen projeden alınır. Proje listesini görüntülemek (ve hangisinin seçildiğini görmek) içinfirebase projects:listsimgesini kullanın.
- Kurallar birim testleri Proje kimliği genellikle initializeTestEnvironmentveyainitializeTestAppkuralları birim testi kitaplığı yöntemlerine yapılan çağrılarda belirtilir.
- Komut satırı --projectişareti. Firebase CLI--projectişaretini iletmek varsayılan projeyi geçersiz kılar. İşaretin değerinin, birim testlerinde ve uygulama başlatma işleminde proje kimliğiyle eşleştiğinden emin olmanız gerekir.
Ayrıca, Apple platformlarınızı, Android ve web projelerinizi yapılandırırken ayarladığınız platforma özel proje kimliği yapılandırmalarını da kontrol edin.
Güvenlik kuralları yapılandırması
Emülatörler, database,firestore ve storage yapılandırma anahtarlarından firebase.json içindeki güvenlik kuralları yapılandırmasını alır.
{
  // Existing firebase configuration ...
  "database": {
    "rules": "database.rules.json"
  },
  "firestore": {
    "rules": "firestore.rules"
  },
  "storage": {
    "rules": "storage.rules"
  }
  // ...
  // Optional emulator configuration. Default
  // values are used if absent.
  "emulators": {
    "singleProjectMode": false, // do not warn on detection of multiple project IDs
    "firestore": {
      "port": "8080"
    },
    "ui": {
      "enabled": true,      // Default is `true`
      "port": 4000          // If unspecified, see CLI log for selected port
    },
    "auth": {
      "port": "9099"
    },
    "pubsub": {
      "port": "8085"
    }
  }
}
Java seçeneklerini belirtme
Realtime Database emülatörü, Cloud Firestore emülatörü ve Cloud Storage for Firebase emülatörünün bir kısmı Java'ya dayanır. Bu emülatörler, JAVA_TOOL_OPTIONS ortam değişkeni aracılığıyla JVM işaretleriyle özelleştirilebilir.
Örneğin, Java yığın alanı ile ilgili hatalar yaşıyorsanız maksimum Java yığın boyutunu 4 GB'a çıkarabilirsiniz:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
Birden fazla işaret, boşluklarla ayrılmış tırnak işaretleri içinde belirtilebilir. Örneğin, JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g". Bu işaretler yalnızca emülatörlerin Java tabanlı bileşenlerini etkiler ve Firebase CLI'nın diğer bölümleri (ör. Emulator Suite UI) üzerinde herhangi bir etkisi yoktur.
Emülatörleri başlatma
Emülatörleri manuel olarak sonlandırılana kadar veya belirlenen bir test komut dosyası süresince çalışacak ve ardından otomatik olarak kapanacak şekilde başlatabilirsiniz.
| Komut | Açıklama | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| emulators:start | firebase.jsoniçinde yapılandırılan Firebase ürünleri için emülatörleri başlatın.
      Emülatör işlemleri, açıkça durdurulana kadar çalışmaya devam eder. Callingemulators:start, emülatörler yüklü değilse bunları ~/.cache/firebase/emulators/ konumuna indirir.
 | ||||||||||||||
| emulators:exec scriptpath | scriptpathkonumunda,firebase.jsoniçinde yapılandırılan Firebase ürünleri için emülatörleri başlattıktan sonra komut dosyasını çalıştırın. Komut dosyası çalışmayı bitirdiğinde emülatör işlemleri otomatik olarak durdurulur.
 | 
firebase emulators:exec yöntemi genellikle sürekli entegrasyon iş akışları için daha uygundur.
Emülatör verilerini dışa ve içe aktarma
Paylaşılabilir ve ortak bir temel veri kümesi olarak kullanmak üzere Authentication, Cloud Firestore, Realtime Database ve Cloud Storage for Firebase emülatörlerinden veri dışa aktarabilirsiniz. Bu veri kümeleri, yukarıda açıklandığı gibi --import işareti kullanılarak içe aktarılabilir.
| emulators:export export_directory | 
        Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü.
        Çalışan bir Cloud Firestore, Realtime Database veya Cloud Storage for Firebase
        emülatör örneğinden veri dışa aktarın. Belirtilen  
        Yukarıda açıklanan  | 
CI sisteminizle entegrasyon
Container mimarisine alınmış Emulator Suite görüntülerini çalıştırma
Tipik bir CI kurulumunda Emulator Suite'in container'larla birlikte yüklenmesi ve yapılandırılması kolaydır.
Dikkat edilmesi gereken birkaç nokta vardır:
- JAR dosyaları - ~/.cache/firebase/emulators/konumuna yüklenir ve önbelleğe alınır.- Tekrar tekrar indirme işlemlerini önlemek için bu yolu CI önbellek yapılandırmanıza ekleyebilirsiniz.
 
- Deponuzda - firebase.jsondosyası yoksa hangi emülatörlerin başlatılacağını belirtmek için- emulators:startveya- emulators:execkomutuna bir komut satırı bağımsız değişkeni eklemeniz gerekir. Örneğin,- --only functions,firestore.
Kimlik doğrulama jetonu oluşturma (yalnızca barındırma emülatörü)
Sürekli entegrasyon iş akışlarınızda Firebase Hosting kullanılıyorsa firebase emulators:exec çalıştırmak için jeton kullanarak giriş yapmanız gerekir. Diğer emülatörlerde giriş yapılması gerekmez.
Jeton oluşturmak için yerel ortamınızda firebase login:ci komutunu çalıştırın. Bu işlem bir CI sisteminden yapılmamalıdır. Kimlik doğrulama talimatlarını uygulayın. Jeton, derlemelerde geçerli olacağından bu adımı proje başına yalnızca bir kez uygulamanız gerekir. Jeton, şifre gibi değerlendirilmeli ve gizli tutulmalıdır.
CI ortamınız, derleme komut dosyalarında kullanılabilecek ortam değişkenleri belirtmenize olanak tanıyorsa erişim jetonu dizesi değerine sahip FIREBASE_TOKEN adlı bir ortam değişkeni oluşturmanız yeterlidir. Firebase CLI, FIREBASE_TOKEN ortam değişkenini otomatik olarak alır ve emülatörler düzgün şekilde başlatılır.
Son çare olarak, jetonu derleme komut dosyanıza ekleyebilirsiniz ancak güvenilmeyen tarafların erişimi olmadığından emin olun. Bu sabit kodlu yaklaşım için --token "YOUR_TOKEN_STRING_HERE" komutuna firebase emulators:exec ekleyebilirsiniz.
Emulator Hub REST API'yi kullanma
Çalışan emülatörleri listeleme
Şu anda çalışan emülatörleri listelemek için Emulator Hub'ın /emulators uç noktasına bir GET isteği gönderin.
curl localhost:4400/emulatorsSonuç, çalışan tüm emülatörleri ve bunların ana makine/bağlantı noktası yapılandırmasını listeleyen bir JSON nesnesi olur. Örneğin:
{
  "hub":{
    "name": "hub",
    "host": "localhost",
    "port": 4400
  },
  "functions": {
    "name": "functions",
    "host": "localhost",
    "port": 5001
  }
  "firestore": {
    "name": "firestore",
    "host": "localhost",
    "port": 8080
  }
}
Arka plan işlevi tetikleyicilerini etkinleştirme / devre dışı bırakma
Bazı durumlarda yerel işlevi ve uzantı tetikleyicilerini geçici olarak devre dışı bırakmanız gerekir. Örneğin, Cloud Firestore emülatöründeki tüm verileri, Cloud Functions veya Extensions emülatörlerinde çalışan onDelete işlevlerini tetiklemeden silmek isteyebilirsiniz.
Yerel işlev tetikleyicilerini geçici olarak devre dışı bırakmak için Emulator Hub'ın /functions/disableBackgroundTriggers uç noktasına bir PUT isteği gönderin.
curl -X PUT localhost:4400/functions/disableBackgroundTriggersSonuç, mevcut durumu ayrıntılı olarak açıklayan bir JSON nesnesi olur.
{
  "enabled": false
}
Devre dışı bırakılan yerel işlev tetikleyicilerini etkinleştirmek için Emulator Hub'ın /functions/enableBackgroundTriggers uç noktasına PUT isteği gönderin.
curl -X PUT localhost:4400/functions/enableBackgroundTriggersSonuç, mevcut durumu ayrıntılı olarak açıklayan bir JSON nesnesi olur.
{
  "enabled": true
}
Emulator SDK entegrasyonları
Bu bölümdeki tablolarda, hangi emülatörlerin istemci ve Yönetici SDK'ları tarafından desteklendiği belirtilmektedir. Gelecekte, emülatör desteğinin planlandığı ancak henüz kullanıma sunulmadığı anlamına gelir.
İstemci SDK'sının kullanılabilirliği
| Android | Apple platformları | Web | Firebase UI Android | Firebase UI iOS | Firebase UI Web | |
|---|---|---|---|---|---|---|
| Realtime Database | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | Gelecek | Yok | 
| Cloud Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | Gelecek | Yok | 
| Authentication | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | Gelecek | 4.7.2 | 
| Cloud Storage for Firebase | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | Yok | 
| Cloud Functions | 19.1.0 | 7.2.0 | 8.0.0 | Yok | Yok | Yok | 
| Hosting | Yok | Yok | Yok | Yok | Yok | Yok | 
| Extensions | Yok | Yok | Yok | Yok | Yok | Yok | 
Admin SDK'nın kullanılabilirliği
| Düğüm | Java | Python | Go | |
|---|---|---|---|---|
| Realtime Database | 8.6.0 | 6.10.0 | 2.18.0 | Gelecek | 
| Cloud Firestore | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 | 
| Authentication | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 | 
| Cloud Storage for Firebase | 9.8.0 | Gelecek | Gelecek | Gelecek | 
| Cloud Functions | Yok | Yok | Yok | Yok | 
| Hosting | Yok | Yok | Yok | Yok | 
| Extensions | Yok | Yok | Yok | Yok |