Uygulamanızı Cloud Firestore Emulator'a bağlayın

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

Firebase projesi seçin

Firebase Local Emulator Suite, tek bir Firebase projesi için ürünlerin emülasyonunu sağlar.

Kullanılacak projeyi seçmek için, emülatörleri başlatmadan önce çalışma dizininizdeki firebase use komutunu çalıştırın. Dilerseniz --project işaretini her bir emülatör komutuna da aktarabilirsiniz.

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

Proje türü Özellikler Emülatörlerle kullan
Gerçek

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

Gerçek projelerde veritabanı örnekleri, depolama paketleri, işlevler veya ilgili Firebase projesi için oluşturduğunuz diğer herhangi bir kaynak gibi canlı kaynaklar bulunur.

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

Öykünmediğiniz ürünlerde, uygulamalarınız ve kodunuz canlı kaynakla (veritabanı örneği, depolama paketi, işlev vb.) etkileşime geçer.

Demo

Demo Firebase projesinin gerçek bir Firebase yapılandırması ve canlı kaynağı yoktur. Bu projelere genellikle codelab'ler veya diğer eğiticiler aracılığıyla erişilebilir.

Demo projelerinin proje kimlikleri demo- önekine sahiptir.

Demo Firebase projeleriyle çalışırken, uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşimde bulunur. Uygulamanız, emülatörünü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 avantajlardan bazıları:

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

Emülatörlerle konuşmak için uygulamanızı kullanın

Başlangıçta, Cloud Firestore emülatörü firebase.json dosyanızdaki her firestore yapılandırması için varsayılan bir veritabanı ve adlandırılmış bir veritabanı oluşturur.

Adlandırılmış veritabanları da belirli bir veritabanına referans veren emülatöre yapılan SDK veya REST API çağrılarına yanıt olarak örtülü olarak da oluşturulur. Örtülü olarak oluşturulan veritabanları açık kurallarla çalışır.

Emulator Suite kullanıcı arayüzünde varsayılan ve adlandırılmış veritabanlarınızla etkileşimli olarak çalışmak için tarayıcınızın adres çubuğunda URL'yi güncelleyerek varsayılan veya adlandırılmış veritabanını seçin.

  • Örneğin, varsayılan örneğinizdeki verilere göz atmak için URL'yi localhost:4000/firestore/default/data olarak güncelleyin.
  • ecommerce adlı bir örneğe göz atmak için localhost:4000/firestore/ecommerce/data sürümüne güncelleyin.

Android, Apple platformları ve Web SDK'ları

Cloud Firestore ile etkileşime geçmek için uygulama içi yapılandırmanızı veya test sınıflarınızı aşağıda açıklanan şekilde ayarlayın. Aşağıdaki örneklerde uygulama kodunun varsayılan proje veritabanına bağlandığını unutmayın. Varsayılan veritabanı dışındaki ek Cloud Firestore veritabanlarını içeren örnekler için birden fazla veritabanı kılavuzuna bakın.

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 firestore = Firebase.firestore
firestore.useEmulator("10.0.2.2", 8080)

firestore.firestoreSettings = firestoreSettings {
    isPersistenceEnabled = false
}
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFirestore firestore = FirebaseFirestore.getInstance();
firestore.useEmulator("10.0.2.2", 8080);

FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
        .setPersistenceEnabled(false)
        .build();
firestore.setFirestoreSettings(settings);
Swift
let settings = Firestore.firestore().settings
settings.host = "127.0.0.1:8080"
settings.cacheSettings = MemoryCacheSettings()
settings.isSSLEnabled = false
Firestore.firestore().settings = settings

Web Modüler API'si

import { getFirestore, connectFirestoreEmulator } from "firebase/firestore";

// firebaseApps previously initialized using initializeApp()
const db = getFirestore();
connectFirestoreEmulator(db, '127.0.0.1', 8080);

Web ad alanına sahip API'sı

// Firebase previously initialized using firebase.initializeApp().
var db = firebase.firestore();
if (location.hostname === "localhost") {
  db.useEmulator("127.0.0.1", 8080);
}

Firestore etkinlikleri tarafından tetiklenen Cloud Functions'ı emülatör kullanarak test etmek için ek kuruluma gerek yoktur. Firestore ve Cloud Functions emülatörleri çalışırken otomatik olarak birlikte çalışırlar.

Yönetici SDK'ları

FIRESTORE_EMULATOR_HOST ortam değişkeni ayarlandığında Firebase Yönetici SDK'ları, Cloud Firestore emülatörüne otomatik olarak bağlanır:

export FIRESTORE_EMULATOR_HOST="127.0.0.1:8080"

Kodunuz Cloud Functions emülatöründe çalışıyorsa initializeApp çağrılırken proje kimliğiniz ve diğer yapılandırmalar otomatik olarak ayarlanır.

Yönetici SDK'si kodunuzun başka bir ortamda çalışan paylaşılan bir emülatöre bağlanmasını istiyorsanız Firebase CLI'yı kullanarak belirlediğiniz proje kimliğini belirtmeniz gerekir. Proje kimliğini doğrudan initializeApp öğesine aktarabilir veya GCLOUD_PROJECT ortam değişkenini ayarlayabilirsiniz.

Node.js Yönetici SDK'sı
admin.initializeApp({ projectId: "your-project-id" });
Ortam Değişkeni
export GCLOUD_PROJECT="your-project-id"

Testler arasında veritabanınızı temizleyin

Üretim Firestore, veritabanını temizlemek için herhangi bir platform SDK yöntemi sağlamaz ancak Firestore emülatörü size bu amaç için özel olarak bir REST uç noktası sağlar.Bu uç nokta, test başlatılmadan önce test çerçevesi kurulum/tearDown adımından, test sınıfından veya kabuktan (ör. curl ile) çağrılabilir. Bu yaklaşımı, emülatör işlemini kapatmaya alternatif olarak kullanabilirsiniz.

Uygun bir yöntemde, Firebase proje kimliğinizi (ör. firestore-emulator-example) aşağıdaki uç noktaya sağlayarak HTTP DELETE işlemi gerçekleştirin:

"http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Doğal olarak kodunuz, temizleme işleminin tamamlandığı veya başarısız olduğu için REST onayını beklemelidir.

Bu işlemi kabuktan yapabilirsiniz:

// Shell alternative…
$ curl -v -X DELETE "http://localhost:8080/emulator/v1/projects/firestore-emulator-example/databases/(default)/documents"

Böyle bir adım uyguladıktan sonra, yeni bir temel test yapılandırması kullandığınız ve eski verilerin çalıştırmalar arasında silineceğinden emin olarak testlerinizi sıralayabilir ve işlevlerinizi tetikleyebilirsiniz.

Verileri içe ve dışa aktarma

Veritabanı ve Cloud Storage for Firebase emülatörleri, çalışan bir emülatör örneğinden verileri dışa aktarmanıza olanak tanır. Birim testlerinizde veya sürekli entegrasyon iş akışlarınızda kullanılacak bir temel veri kümesi tanımlayın, ardından bunları ekip arasında paylaşılması için dışa aktarın.

firebase emulators:export ./dir

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

firebase emulators:start --import=./dir

Emülatöre, kapatma sırasında verileri dışa aktarma talimatı verebilirsiniz. Bunun için bir dışa aktarma yolu belirtebilir veya sadece --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.

Güvenlik Kuralları etkinliğini görselleştirme

Prototip ve test döngüleri üzerinde çalışırken Local Emulator Suite tarafından sağlanan görselleştirme araçlarını ve raporları kullanabilirsiniz.

İstek İzleyicisi'ni kullanma

Cloud Firestore emülatörü, Firebase Güvenlik Kuralları için değerlendirme izleme dahil olmak üzere Emulator Suite kullanıcı arayüzünde istemci isteklerini görselleştirmenize olanak tanır.

Her isteğin ayrıntılı değerlendirme sırasını görüntülemek için Firestore > İstekler sekmesini açın.

Güvenlik Kuralları değerlendirmelerini gösteren Firestore Emulator Request Monitor

Kural değerlendirme raporlarını görselleştirme

Prototipinize Güvenlik Kuralları eklerken Yerel Emulator Suite hata ayıklama araçlarıyla bu kurallardaki hataları ayıklayabilirsiniz.

Bir test grubu çalıştırdıktan sonra, güvenlik kurallarınızın her birinin nasıl değerlendirildiğini gösteren test kapsamı raporlarına erişebilirsiniz.

Raporları almak için, emülatörde çalışırken açık bir uç noktayı sorgulayın. Tarayıcı dostu bir sürüm için aşağıdaki URL'yi kullanın:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage.html

Bu işlem, kurallarınızı, değerlendirmelerin ve döndürülen değerlerin sayısı dahil daha fazla bilgi için fareyle üzerine getirebileceğiniz ifadelere ve alt ifadelere ayırır. Bu verilerin ham JSON sürümü için sorgunuza aşağıdaki URL'yi ekleyin:

http://localhost:8080/emulator/v1/projects/<database_name>:ruleCoverage

Burada, raporun HTML sürümünde tanımlanmamış ve boş değerli hatalar veren değerlendirmeler vurgulanmaktadır:

Cloud Firestore emülatörünün üretimden farkı

Cloud Firestore Emulator, bazı önemli sınırlamalarla üretim hizmetinin davranışını gerçek bir şekilde kopyalamaya çalışır.

Cloud Firestore için birden fazla veritabanı desteği

Şu anda Emulator Suite kullanıcı arayüzü, varsayılan bir veritabanı için etkileşimli oluşturma, düzenleme, silme, istek izleme ve güvenlik görselleştirmesini desteklemektedir ancak adlandırılmış ek veritabanları için desteklenmemektedir.

Ancak emülatörün kendisi firebase.json dosyanızın yapılandırmasına göre ve dolaylı olarak SDK veya REST API çağrılarına yanıt olarak adlandırılmış bir veritabanı oluşturur.

İşlemler

Emülatör şu anda üretimde görülen tüm işlem davranışlarını uygulamamaktadır. Bir dokümana aynı anda yapılan birden fazla yazma işlemi içeren özellikleri test ederken, emülatör yazma isteklerini tamamlamada yavaş olabilir. Bazı durumlarda kilitlerin açılması 30 saniye kadar sürebilir. Gerekirse test zaman aşımlarını uygun şekilde ayarlamayı düşünün.

Dizinler

Emülatör, bileşik dizinleri izlemez ve bunun yerine geçerli sorguları yürütür. İhtiyacınız olacak dizinleri belirlemek için uygulamanızı gerçek bir Cloud Firestore örneğine göre test ettiğinizden emin olun.

Sınırlar

Emülatör, üretimde uygulanan tüm sınırları zorunlu kılmaz. Örneğin, emülatör, üretim hizmeti tarafından çok büyük olduğu için reddedilecek işlemlere izin verebilir. Belgelenmiş sınırlar hakkında bilgi sahibi olduğunuzdan ve uygulamanızı bunlardan proaktif olarak kaçınacak şekilde tasarladığınızdan emin olun.

Sırada ne var?