از SDK های iOS تولید شده استفاده کنید

SDK های مشتری Firebase Data Connect به شما امکان می دهند پرس و جوها و جهش های سمت سرور خود را مستقیماً از یک برنامه Firebase فراخوانی کنید. همزمان با طراحی طرحواره ها، پرس و جوها و جهش هایی که در سرویس Data Connect خود مستقر می کنید، یک SDK مشتری سفارشی ایجاد می کنید. سپس، شما متدها را از این SDK در منطق کلاینت خود ادغام می کنید.

همانطور که در جاهای دیگر ذکر کردیم، توجه به این نکته مهم است که کوئری‌ها و جهش‌های Data Connect توسط کد مشتری ارسال نمی‌شوند و روی سرور اجرا نمی‌شوند. در عوض، هنگام استقرار، عملیات Data Connect مانند توابع ابری در سرور ذخیره می شود. این بدان معناست که شما باید تغییرات سمت کلاینت مربوطه را برای جلوگیری از شکستن کاربران موجود (مثلاً در نسخه‌های قدیمی‌تر برنامه) اعمال کنید.

به همین دلیل است که Data Connect یک محیط توسعه‌دهنده و ابزاری را در اختیار شما قرار می‌دهد که به شما امکان می‌دهد طرح‌واره‌ها، پرسش‌ها و جهش‌های مستقر در سرور خود را نمونه‌سازی کنید. همچنین در حالی که شما نمونه سازی می کنید، SDK های سمت سرویس گیرنده را به طور خودکار تولید می کند.

هنگامی که به‌روزرسانی‌های سرویس و برنامه‌های سرویس گیرنده خود را تکرار کردید، به‌روزرسانی‌های سمت سرور و سرویس گیرنده آماده اجرا هستند.

Swift SDK خود را ایجاد کنید

مانند بسیاری از پروژه های Firebase، کار بر روی کد مشتری Firebase Data Connect در یک فهرست پروژه محلی انجام می شود. هم افزونه Data Connect VS Code و هم Firebase CLI ابزارهای محلی مهمی برای تولید و مدیریت کد مشتری هستند.

گزینه‌های تولید SDK برای چندین ورودی در فایل dataconnect.yaml که هنگام راه‌اندازی پروژه خود ایجاد می‌شوند، کلید می‌شوند.

تولید SDK را راه اندازی کنید

در connector.yaml خود، outputDir ، package و (برای وب SDK) packageJsonDir خود را اضافه کنید.
connectorId: "movies"
generate:
  swiftSdk:
    outputDir: "../movies-generated"
    package: "Movies"

outputDir مشخص می کند که SDK تولید شده باید به کجا خروجی داشته باشد. اگر مشخص نشده باشد، پوشه رابط به عنوان دایرکتوری خروجی پیش فرض استفاده می شود.

package نام بسته ای که تولید می شود را مشخص می کند. ژنراتور پوشه ای با نام بسته ایجاد می کند که حاوی Package.swift و کد تولید شده است.

observablePublisher (اختیاری) ناشر Observable را برای استفاده در refs پرس و جو مشخص می کند. مقادیر ممکن عبارتند از observableMacro (iOS 17+) و observableObject (قبل از iOS 17). مقدار پیش‌فرض، اگر هیچ کدام مشخص نشده باشد، observableMacro است.

SDK ها را هنگام نمونه سازی به روز کنید

اگر به صورت تعاملی با افزونه Data Connect VS Code و شبیه‌ساز Data Connect آن نمونه‌سازی می‌کنید، فایل‌های منبع SDK به‌طور خودکار تولید و به‌روزرسانی می‌شوند در حالی که فایل‌های .gql را که طرح‌واره‌ها، پرسش‌ها و جهش‌ها را تعریف می‌کنند، تغییر می‌دهید. این می تواند یک ویژگی مفید در بارگذاری مجدد جریان های کاری داغ باشد.

در سناریوهای دیگر، اگر از شبیه‌ساز Data Connect از Firebase CLI استفاده می‌کنید، می‌توانید ساعتی را روی به‌روزرسانی‌های .gql تنظیم کنید و همچنین منابع SDK را به‌طور خودکار به‌روزرسانی کنید.

همچنین، می‌توانید هر زمان که فایل‌های .gql تغییر می‌کنند، از CLI برای بازسازی SDK‌ها استفاده کنید:

firebase dataconnect:sdk:generate --watch

SDK ها را برای ادغام و برای انتشار تولید ایجاد کنید

در برخی از سناریوها، مانند آماده کردن منابع پروژه برای ارسال برای آزمایش‌های CI، می‌توانید برای به‌روزرسانی دسته‌ای Firebase CLI تماس بگیرید.

در این موارد، از firebase dataconnect:sdk:generate استفاده کنید.

کد مشتری را تنظیم کنید

برای تنظیم کد سرویس گیرنده خود برای استفاده از Data Connect و SDK تولید شده خود، ابتدا دستورالعمل های استاندارد راه اندازی Firebase را دنبال کنید.

سپس، فضای کاری برنامه خود را با استفاده از Xcode باز کنید.

در نوار پیمایش بالا، File > Add Package Dependencies > Add Local را انتخاب کنید و پوشه حاوی فایل منبع Package.swift تولید شده را انتخاب کنید.

Data Connect iOS SDK را راه اندازی کنید

نمونه Data Connect خود را با استفاده از اطلاعاتی که برای راه اندازی Data Connect استفاده کردید (همه در تب Data Connect کنسول Firebase موجود است) راه اندازی کنید.

دریافت نمونه اتصال

کد کانکتور شما توسط شبیه ساز Data Connect تولید می شود. اگر نام کانکتور شما movies و بسته movies است، همانطور که در connector.yaml مشخص شده است، سپس با فراخوانی شیء رابط را بازیابی کنید:

let connector = DataConnect.moviesConnector

اجرای کوئری ها و جهش ها

با شی رابط، می توانید پرس و جوها و جهش ها را همانطور که در کد منبع GraphQL تعریف شده است اجرا کنید. فرض کنید کانکتور شما دارای این عملیات تعریف شده است:

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
  }
}

سپس می توانید یک فیلم به صورت زیر ایجاد کنید:

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)")

برای بازیابی یک فیلم، از مرجع پرس و جو استفاده خواهید کرد. همه مراجع پرس و جو ناشر قابل مشاهده هستند. بسته به ناشر پیکربندی شده (به connector.yaml) ، آنها یا از ماکرو @Observable (iOS 17+) پشتیبانی می کنند یا پروتکل ObservableObject را پیاده سازی می کنند. پیش‌فرض، اگر هیچ کدام مشخص نشده باشد، ماکرو @Observable است که در iOS 17+ پشتیبانی می‌شود.

در نمای SwiftUI، می توانید نتایج پرس و جو را با استفاده از متغیر data منتشر شده query ref متصل کنید و متد execute() query را برای به روز رسانی داده ها فراخوانی کنید. متغیر data با شکل داده ای که در تعریف پرس و جوی GQL شما تعریف شده است مطابقت دارد.

همه نتایج بازیابی شده با پروتکل Decodable مطابقت دارند. اگر کلید اصلی شی را در واکشی GQL خود وارد کرده اید، اشیاء نیز Identifiable هستند و به شما امکان می دهند از آنها در تکرارکننده ها استفاده کنید.

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()
    }
}

کوئری ها از اجرای تک شات نیز پشتیبانی می کنند.

let resultData = try await DataConnect.moviesConnector.listMoviesByGenreQuery.execute(genre: "Sci-Fi")

برنامه iOS خود را نمونه اولیه و آزمایش کنید

کلاینت های ابزار برای استفاده از شبیه ساز محلی

می توانید از شبیه ساز Data Connect استفاده کنید، چه از پسوند Data Connect VS Code یا از CLI.

ابزار دقیق برنامه برای اتصال به شبیه ساز برای هر دو سناریو یکسان است.

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 SDKs

سرور Data Connect نشان دهنده انواع داده های رایج و سفارشی GraphQL است. این موارد در SDK به شرح زیر نشان داده شده است.

نوع اتصال داده سویفت
رشته رشته
بین المللی بین المللی
شناور دوبل
بولی بول
UUID UUID
تاریخ FirebaseDataConnect.LocalDate
مهر زمان FirebaseCore.Timestamp
Int64 Int64
هر FirebaseDataConnect.AnyValue