Firebase Data Connect İstemci SDK'ları, sunucu tarafı sorgularınızı ve mutasyonlarınızı doğrudan bir Firebase uygulamasından çağırmanıza olanak tanır. Şemaları, sorguları ve mutasyonları tasarlarken özel bir istemci SDK'sı oluşturursunuz. Bu SDK'yı Data Connect hizmetinize dağıtırsınız. Ardından, bu SDK'daki yöntemleri istemci mantığınıza entegre edersiniz.
Başka bir yerde de belirttiğimiz gibi, Data Connectsorguların ve mutasyonların istemci kodu tarafından gönderilmediğini ve sunucuda yürütülmediğini unutmamak önemlidir. Bunun yerine, dağıtıldığında Data Connect işlemleri Cloud Functions gibi sunucuda depolanır. Bu nedenle, mevcut kullanıcıların (ör. uygulamanın eski sürümlerinde) deneyimini bozmamak için ilgili istemci tarafı değişiklikleri dağıtmanız gerekir.
Bu nedenle Data Connect, sunucuya dağıtılan şemalarınızı, sorgularınızı ve mutasyonlarınızı prototip oluşturmanıza olanak tanıyan bir geliştirme ortamı ve araçlar sunar. Ayrıca, prototip oluştururken istemci tarafı SDK'larını otomatik olarak oluşturur.
Hizmetinizde ve istemci uygulamalarınızda güncellemeleri yineledikten sonra hem sunucu hem de istemci tarafı güncellemeleri dağıtılmaya hazır olur.
İstemci geliştirme iş akışı nedir?
Başlayın bölümündeki talimatları uyguladıysanız Data Connect için genel geliştirme akışıyla tanışmışsınızdır. Bu kılavuzda, şemanızdan Swift SDK'leri oluşturma ve istemci sorguları ile mutasyonlarla çalışma hakkında daha ayrıntılı bilgi edinebilirsiniz.
Özetlemek gerekirse, oluşturulan Swift SDK'larını istemci uygulamalarınızda kullanmak için aşağıdaki ön koşul adımlarını uygulamanız gerekir:
- Firebase'i iOS uygulamanıza ekleyin.
Oluşturulan SDK'yı kullanmak için Xcode'da bağımlılık olarak yapılandırın.
Xcode'un üst gezinme çubuğunda File > Add Package Dependencies > Add Local'ı (Dosya > Paket Bağımlılıkları Ekle > Yerel Ekle) seçin ve oluşturulan
Package.swift'yi içeren klasörü belirleyin.
Ardından:
- Uygulama şemanızı geliştirin.
SDK oluşturmayı ayarlayın:
- Data Connect VS Code uzantımızdaki SDK'yı uygulamaya ekle düğmesiyle
connector.yamlcihazınızı güncelleyerek
Data Connect emülatörünü ayarlayıp kullanın ve yineleyin.
Swift SDK'nızı oluşturma
Uygulamalarınızda Data Connect tarafından oluşturulan SDK'ları ayarlamak için Firebase KSA'yı kullanın.
init komutu, geçerli klasördeki tüm uygulamaları algılamalı ve oluşturulan SDK'ları otomatik olarak yüklemelidir.
firebase init dataconnect:sdk
Prototip oluştururken SDK'ları güncelleme
Data Connect VS Code uzantısı yüklüyse oluşturulan SDK'lar her zaman güncel tutulur.
Data Connect VS Code uzantısını kullanmıyorsanız oluşturulan SDK'ları güncel tutmak için Firebase CLI'yı kullanabilirsiniz.
firebase dataconnect:sdk:generate --watchDerleme ardışık düzenlerinde SDK oluşturma
Firebase CLI'yı kullanarak CI/CD derleme işlemlerinde Data Connect SDK'ları oluşturabilirsiniz.
firebase dataconnect:sdk:generateData Connect iOS SDK'sını başlatma
Data Connect hizmetini kurarken kullandığınız bilgileri kullanarak Data Connect örneğinizi başlatın (tümü Firebase konsolunun Data Connect sekmesinde bulunur).
Bağlayıcı örneği alma
Bağlayıcınızın kodu, Data Connect emülatörü tarafından oluşturulur. connector.yaml içinde belirtildiği gibi bağlayıcınızın adı movies ve paketiniz movies ise bağlayıcı nesnesini şu işlevi çağırarak alın:
let connector = DataConnect.moviesConnector
Sorguları ve mutasyonları uygulama
Bağlayıcı nesnesiyle, GraphQL kaynak kodunda tanımlandığı şekilde sorgu ve mutasyon çalıştırabilirsiniz. Bağlayıcınızda aşağıdaki işlemlerin tanımlandığını varsayalım:
mutation createMovie($title: String!, $releaseYear: Int!, $genre: String!, $rating: Int!) {
movie_insert(data: {
title: $title
releaseYear: $releaseYear
genre: $genre
rating: $rating
})
}
query getMovieByKey($key: Movie_Key!) {
movie(key: $key) { id title }
}
query listMoviesByGenre($genre: String!) {
movies(where: {genre: {eq: $genre}}) {
id
title
}
}
Ardından aşağıdaki şekilde film oluşturabilirsiniz:
let mutationResult = try await connector.createMovieMutation.execute(
title: "Empire Strikes Back",
releaseYear: 1980,
genre: "Sci-Fi",
rating: 5)
print("Movie ID: \(mutationResult.data.movie_insert.id)")
Bir filmi almak için sorgu referansı kullanırsınız. Tüm sorgu referansları Observable yayıncılarıdır. Yapılandırılan yayıncıya bağlı olarak (connector.yaml) bölümüne bakın) @Observable makrosunu (iOS 17+) destekler veya ObservableObject protokolünü uygularlar. Hiçbiri belirtilmemişse varsayılan olarak iOS 17 ve sonraki sürümlerde desteklenen @Observable makrosu kullanılır.
Bir SwiftUI görünümünde, sorgu sonuçlarını sorgu referansının yayınlanmış data değişkenini kullanarak bağlayabilir ve verileri güncellemek için sorgunun execute() yöntemini çağırabilirsiniz. data değişkeni, GQL sorgu tanımınızda tanımlanan verilerin şekliyle eşleşir.
Alınan tüm sonuçlar Decodable protokolüne uygundur. GQL getirme işleminize nesnenin birincil anahtarını dahil ettiyseniz nesneler de Identifiable olur. Böylece bunları yineleyicilerde kullanabilirsiniz.
struct ListMovieView: View {
@StateObject private var queryRef = connector.listMoviesByGenreQuery.ref(genre: "Sci-Fi")
var body: some View {
VStack {
Button {
Task {
do {
try await refresh()
} catch {
print("Failed to refresh: \(error)")
}
}
} label: {
Text("Refresh")
}
// use the query results in a view
ForEach(queryRef.data?.movies ?? [], id: \.self.id) { movie in
Text(movie.title)
}
}
}
@MainActor
func refresh() async throws {
_ = try await queryRef.execute()
}
}
Sorgular, tek seferlik yürütmeyi de destekler.
let resultData = try await DataConnect.moviesConnector.listMoviesByGenreQuery.execute(genre: "Sci-Fi")
Numaralandırma alanlarındaki değişiklikleri işleme
Bir uygulamanın şeması, numaralandırmalar içerebilir. Bu numaralandırmalara GraphQL sorgularınızla erişilebilir.
Uygulamanın tasarımı değiştiğinde yeni enum destekli değerler ekleyebilirsiniz. Örneğin, uygulamanızın yaşam döngüsünün ilerleyen aşamalarında AspectRatio enum'una bir FULLSCREEN değeri eklemeye karar verdiğinizi varsayalım.
Data Connect iş akışında, sorgularınızı ve SDK'larınızı güncellemek için yerel geliştirme araçlarını kullanabilirsiniz.
Ancak, istemcilerinizin güncellenmiş bir sürümünü yayınlamadan önce, daha önce dağıtılmış eski istemciler bozulabilir.
Esnek uygulama örneği
Oluşturulan SDK, bilinmeyen değerlerin oluşturulan numaralandırılmış türler olarak işlenmesini zorunlu kılar. Çünkü oluşturulan numaralandırılmış türler bir _UNKNOWN değeri içerir ve Swift, kapsamlı anahtar ifadelerini zorunlu kılar.
do {
let result = try await DataConnect.moviesConnector.listMovies.execute()
if let data = result.data {
for movie in data.movies {
switch movie.aspectratio {
case .ACADEMY: print("academy")
case .WIDESCREEN: print("widescreen")
case .ANAMORPHIC: print("anamorphic")
case ._UNKNOWN(let unknownAspect): print(unknownAspect)
}
}
}
} catch {
// handle error
}
İstemci tarafı önbelleğe almayı etkinleştirme
Data Connect, connector.yaml dosyası düzenlenerek etkinleştirilebilen isteğe bağlı bir istemci tarafı önbelleğe alma özelliğine sahiptir. Bu özellik etkinleştirildiğinde oluşturulan istemci SDK'ları sorgu yanıtlarını yerel olarak önbelleğe alır. Bu sayede uygulamanızın yaptığı veritabanı isteklerinin sayısı azaltılabilir ve ağ kullanılabilirliği kesintiye uğradığında uygulamanızın veritabanına bağlı bölümlerinin çalışması sağlanabilir.
İstemci tarafı önbelleğe almayı etkinleştirmek için bağlayıcı yapılandırmanıza istemci önbelleğe alma yapılandırması ekleyin:
generate:
swiftSdk:
outputDir: "../ios"
package: "FirebaseDataConnectGenerated"
clientCache:
maxAge: 5s
storage: persistent
Bu yapılandırmada iki parametre vardır ve her ikisi de isteğe bağlıdır:
maxAge: İstemci SDK'sının yeni değerler getirmesinden önce, önbelleğe alınmış bir yanıtın olabileceği maksimum süre. Örnekler: "0", "30s", "1h30m".maxAgeiçin varsayılan değer0'dir. Bu, yanıtların önbelleğe alındığı ancak istemci SDK'sının her zaman yeni değerler getireceği anlamına gelir. Önbelleğe alınan değerler yalnızcaCACHE_ONLY,execute()olarak belirtildiğinde kullanılır.storage: İstemci SDK'sı, yanıtlarıpersistentdepolama alanında veyamemory'de önbelleğe alacak şekilde yapılandırılabilir.persistentdepolama alanında önbelleğe alınan sonuçlar, uygulama yeniden başlatıldığında da geçerli olmaya devam eder. iOS SDK'larında varsayılan değerpersistent'dır.
Bağlayıcınızın önbelleğe alma yapılandırmasını güncelledikten sonra istemci SDK'larınızı yeniden oluşturun ve uygulamanızı yeniden oluşturun. Bunu yaptıktan sonra execute(), yanıtları önbelleğe alır ve yapılandırdığınız politikaya göre önbelleğe alınmış değerleri kullanır. Bu işlem genellikle otomatik olarak gerçekleşir ve sizin herhangi bir ek işlem yapmanıza gerek yoktur. Ancak aşağıdakileri unutmayın:
execute()'nın varsayılan davranışı yukarıda açıklandığı gibidir: Bir sorgu için sonuç önbelleğe alınırsa ve önbelleğe alınan değermaxAge'dan eski değilse önbelleğe alınan değer kullanılır. Bu varsayılan davranışaPREFER_CACHEpolitikası denir.Ayrıca,
execute()'nın tek tek çağrılarında yalnızca önbelleğe alınmış değerlerin sunulmasını (CACHE_ONLY) veya sunucudan koşulsuz olarak yeni değerlerin getirilmesini (SERVER_ONLY) de belirtebilirsiniz.try await execute(fetchPolicy: .cacheOnly)try await execute(fetchPolicy: .serverOnly)iOS uygulamanızın prototipini oluşturma ve test etme
İstemcileri yerel bir emülatör kullanacak şekilde yapılandırma
Data Connect emülatörünü, Data Connect VS Code uzantısından veya KSA'dan kullanabilirsiniz.
Uygulamayı emülatöre bağlanacak şekilde ayarlama işlemi her iki senaryoda da aynıdır.
let connector = DataConnect.moviesConnector // Connect to the emulator on "127.0.0.1:9399" connector.useEmulator() // (alternatively) if you're running your emulator on non-default port: connector.useEmulator(port: 9999) // Make calls from your appData Connect SDK'larındaki veri türleri
Data Connect sunucusu, yaygın ve özel GraphQL veri türlerini temsil eder. Bunlar SDK'da aşağıdaki gibi gösterilir.
Data Connect Tür Swift Dize Dize Int Int Kayan Çift Boole Boole UUID UUID Tarih FirebaseDataConnect.LocalDate Zaman damgası FirebaseCore.Timestamp Int64 Int64 Hepsi FirebaseDataConnect.AnyValue