Oluşturulan iOS SDK'larını kullanma

Firebase Data Connect istemci SDK'ları, sunucu tarafı sorgularınızı ve mutasyonlarınızı doğrudan bir Firebase uygulamasından çağırmanıza olanak tanır. Data Connect hizmetinize dağıttığınız şemaları, sorguları ve mutasyonları tasarlarken paralel olarak özel bir istemci SDK'sı oluşturursunuz. Daha sonra, bu SDK'daki yöntemleri istemci mantığınıza entegre edersiniz.

Başka bir yerde de belirttiğimiz gibi, Data Connectsorgularının ve mutasyonlarının istemci kodu tarafından gönderilmediğini ve sunucuda yürütülmediğini belirtmek önemlidir. Bunun yerine, dağıtılan Data Connect işlemleri Cloud Functions gibi sunucuda depolanır. Bu nedenle, mevcut kullanıcıların (ör. eski uygulama sürümlerinde) uygulamayı kullanamamasını önlemek için istemci tarafında ilgili değişiklikleri dağıtmanız gerekir.

Bu nedenle Data Connect, sunucu üzerinde dağıtılan şemalarınızı, sorgularınızı ve mutasyonlarınızı prototip haline getirmenizi sağlayan bir geliştirici ortamı ve araçları sunar. Ayrıca, siz prototip oluştururken istemci tarafı SDK'ları otomatik olarak oluşturur.

Hizmetinizde ve istemci uygulamalarınızda güncellemeleri iteratif olarak uyguladığınızda hem sunucu hem de istemci tarafı güncellemeleri dağıtılmaya hazır olur.

Swift SDK'nızı oluşturma

Çoğu Firebase projesinde olduğu gibi, Firebase Data Connect istemci kodunuz üzerindeki işlemler yerel proje dizininde gerçekleştirilir. Hem Data Connect VS Code uzantısı hem de Firebase CLI, istemci kodu oluşturmak ve yönetmek için önemli yerel araçlardır.

SDK oluşturma seçenekleri, projenizi başlattığınızda oluşturulan dataconnect.yaml dosyasında birkaç girişe bağlanır.

SDK oluşturma işlemini başlatma

connector.yaml dosyanıza outputDir, package ve (web SDK'sı için) packageJsonDir dosyalarınızı ekleyin.
connectorId: "movies"
generate:
  swiftSdk:
    outputDir: "../movies-generated"
    package: "Movies"

outputDir, oluşturulan SDK'nın nereye yayınlanacağını belirtir. Belirtilmezse bağlayıcı klasörü varsayılan çıkış dizini olarak kullanılır.

package, oluşturulacak paketin adını belirtir. Oluşturma aracı, paketin adını içeren, Package.swift ve oluşturulan kodu içeren bir klasör oluşturur.

observablePublisher (isteğe bağlı), sorgu referanslarında kullanılacak Observable yayıncıyı belirtir. Olası değerler observableMacro (iOS 17 ve sonraki sürümler) ve observableObject'dir (iOS 17 öncesi sürümler). Bir değer belirtilmezse varsayılan değer observableMacro olur.

Prototip oluştururken SDK'ları güncelleme

Data Connect VS Code uzantısı ve Data Connect emülatörüyle etkileşimli olarak prototip oluşturuyorsanız şemaları, sorguları ve mutasyonları tanımlayan .gql dosyalarını değiştirirken SDK kaynak dosyaları otomatik olarak oluşturulur ve güncellenir. Bu özellik, sıcak (yeniden) yükleme iş akışlarında yararlı olabilir.

Diğer senaryolarda, Firebase CLI'dan Data Connect emülatörünü kullanıyorsanız .gql güncellemelerinde bir saat ayarlayabilir ve ayrıca SDK kaynaklarının otomatik olarak güncellenmesini sağlayabilirsiniz.

Alternatif olarak, .gql dosyaları her değiştirildiğinde SDK'ları yeniden oluşturmak için KSA'yı kullanabilirsiniz:

firebase dataconnect:sdk:generate --watch

Entegrasyon ve üretim sürümleri için SDK'lar oluşturma

CI testlerine göndermek üzere proje kaynaklarını hazırlama gibi bazı senaryolarda Firebase KSA'yı toplu güncelleme için çağırabilirsiniz.

Bu durumlarda firebase dataconnect:sdk:generate kullanın.

Müşteri kodunu ayarlayın

Müşteri kodunuzu Data Connect'i ve oluşturulan SDK'nızı kullanacak şekilde ayarlamak için önce standart Firebase kurulum talimatlarını uygulayın.

Ardından, Xcode'u kullanarak uygulama çalışma alanınızı açın.

Üst gezinme çubuğunda Dosya > Paket Bağımlılıkları Ekle > Yerel Ekle'yi seçin ve oluşturulan Package.swift kaynak dosyasını içeren klasörü seçin.

Data Connect iOS SDK'sını başlatma

Data Connect'i ayarlamak için kullandığınız bilgileri kullanarak Data Connect örneğinizi başlatın (tüm bilgiler 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. Bağlayıcınızın adı movies ve paket connector.yaml içinde belirtildiği gibi movies ise aşağıdaki çağrıyı yaparak bağlayıcı nesnesini alın:

let connector = DataConnect.moviesConnector

Sorgular ve Mutasyonları Çalıştırma

Bağlantılayıcı nesnesi ile GraphQL kaynak kodunda tanımlandığı şekilde sorgular ve mutasyonlar ç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 gibi bir 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)")

Film almak için sorgu referansı kullanırsınız. Tüm sorgu referansları gözlemlenebilir yayıncılardır. Yapılandırılmış yayıncıya bağlı olarak (connector.yaml) bölümüne bakın), @Observable makrosunu (iOS 17 ve sonraki sürümler) destekler veya ObservableObject protokolünü uygular. Hiçbiri belirtilmezse varsayılan olarak iOS 17 ve sonraki sürümlerde desteklenen @Observable makrosu kullanılır.

SwiftUI görünümünde, sorgu referansının yayınlanan data değişkenini kullanarak sorgu sonuçlarını bağlayabilir ve verileri güncellemek için sorgunun execute() yöntemini çağırabilirsiniz. data değişkeni, GQL sorgu tanımınıza 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 ederseniz nesneler de Identifiable olur. Böylece nesneleri yinelemelerde 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")

iOS uygulamanızın prototipini oluşturma ve test etme

İstemcileri yerel bir emülatör kullanacak şekilde ayarlama

Data Connect emülatörünü Data Connect VS Code uzantısından veya CLI'den kullanabilirsiniz.

Uygulamayı, emülatöre bağlanacak şekilde ayarlama işlemi her iki senaryo için de 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 app

Data 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 temsil edilir.

Veri Bağlantısı 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