তৈরি করা iOS SDK ব্যবহার করুন

Firebase Data Connect ক্লায়েন্ট SDK-গুলো আপনাকে একটি ফায়ারবেস অ্যাপ থেকে সরাসরি আপনার সার্ভার-সাইড কোয়েরি এবং মিউটেশন কল করার সুযোগ দেয়। আপনার Data Connect সার্ভিসে যে স্কিমা, কোয়েরি এবং মিউটেশনগুলো ডেপ্লয় করবেন, সেগুলোর ডিজাইন করার পাশাপাশি আপনি একটি কাস্টম ক্লায়েন্ট SDK তৈরি করেন। তারপর, এই SDK-এর মেথডগুলো আপনার ক্লায়েন্ট লজিকে ইন্টিগ্রেট করেন।

আমরা অন্যত্র যেমন উল্লেখ করেছি, এটা মনে রাখা গুরুত্বপূর্ণ যে Data Connect কোয়েরি এবং মিউটেশনগুলো ক্লায়েন্ট কোড দ্বারা সাবমিট করা হয় না এবং সার্ভারে এক্সিকিউট করা হয় না। পরিবর্তে, ডেপ্লয় করার সময়, Data Connect অপারেশনগুলো ক্লাউড ফাংশনের মতো সার্ভারে সংরক্ষিত হয়। এর মানে হলো, বিদ্যমান ব্যবহারকারীদের (উদাহরণস্বরূপ, অ্যাপের পুরোনো সংস্করণগুলোতে) সমস্যা এড়াতে আপনাকে সংশ্লিষ্ট ক্লায়েন্ট-সাইড পরিবর্তনগুলো ডেপ্লয় করতে হবে।

এই কারণেই Data Connect আপনাকে এমন একটি ডেভেলপার এনভায়রনমেন্ট এবং টুলিং প্রদান করে, যা দিয়ে আপনি আপনার সার্ভারে ডেপ্লয় করা স্কিমা, কোয়েরি এবং মিউটেশনগুলোর প্রোটোটাইপ তৈরি করতে পারেন। এছাড়াও, আপনি প্রোটোটাইপ করার সময়েই এটি স্বয়ংক্রিয়ভাবে ক্লায়েন্ট-সাইড SDK তৈরি করে দেয়।

যখন আপনি আপনার পরিষেবা এবং ক্লায়েন্ট অ্যাপগুলিতে আপডেটগুলি পুনরাবৃত্তি করবেন, তখন সার্ভার- এবং ক্লায়েন্ট-সাইড উভয় আপডেটই স্থাপনের জন্য প্রস্তুত হয়ে যাবে।

ক্লায়েন্ট ডেভেলপমেন্ট ওয়ার্কফ্লো কী?

আপনি যদি ' Get started' অংশটি অনুসরণ করে থাকেন, তাহলে আপনাকে Data Connect এর সামগ্রিক ডেভেলপমেন্ট ফ্লো-এর সাথে পরিচয় করিয়ে দেওয়া হয়েছে। এই গাইডে, আপনি আপনার স্কিমা থেকে Swift SDK তৈরি করা এবং ক্লায়েন্ট কোয়েরি ও মিউটেশন নিয়ে কাজ করার বিষয়ে আরও বিস্তারিত তথ্য পাবেন।

সংক্ষেপে, আপনার ক্লায়েন্ট অ্যাপে জেনারেট করা সুইফট এসডিকে ব্যবহার করতে হলে, আপনাকে এই পূর্বশর্ত ধাপগুলো অনুসরণ করতে হবে:

  1. আপনার iOS অ্যাপে Firebase যোগ করুন।
  2. জেনারেট করা SDK ব্যবহার করতে, এটিকে Xcode-এ একটি ডিপেন্ডেন্সি হিসেবে কনফিগার করুন।

    Xcode-এর টপ নেভিগেশন বারে, File > Add Package Dependencies > Add Local নির্বাচন করুন এবং তৈরি হওয়া Package.swift ফাইলটি যে ফোল্ডারে রয়েছে, সেটি বেছে নিন।

তারপর:

  1. আপনার অ্যাপের স্কিমা তৈরি করুন।
  2. SDK জেনারেশন সেট আপ করুন:

  3. আপনার ক্লায়েন্ট কোড শুরু করুন এবং লাইব্রেরিগুলো ইম্পোর্ট করুন

  4. কোয়েরি এবং মিউটেশন কলগুলো বাস্তবায়ন করুন

  5. Data Connect এমুলেটরটি সেট আপ করে ব্যবহার করুন এবং পুনরাবৃত্তি করুন।

আপনার সুইফট এসডিকে তৈরি করুন

আপনার অ্যাপগুলিতে Data Connect তৈরি SDK সেট আপ করতে Firebase CLI ব্যবহার করুন। init কমান্ডটি বর্তমান ফোল্ডারের সমস্ত অ্যাপ সনাক্ত করবে এবং তৈরি করা SDK-গুলি স্বয়ংক্রিয়ভাবে ইনস্টল করবে।

firebase init dataconnect:sdk

প্রোটোটাইপিং করার সময় SDK আপডেট করুন।

আপনার যদি ডেটা কানেক্ট ভিএস কোড এক্সটেনশন ইনস্টল করা থাকে, তাহলে এটি তৈরি করা এসডিকে-গুলোকে সর্বদা হালনাগাদ রাখবে।

আপনি যদি ডেটা কানেক্ট ভিএস কোড এক্সটেনশন ব্যবহার না করেন, তাহলে জেনারেট করা এসডিকে-গুলো আপ-টু-ডেট রাখতে ফায়ারবেস সিএলআই ব্যবহার করতে পারেন।

firebase dataconnect:sdk:generate --watch

বিল্ড পাইপলাইনে SDK তৈরি করুন

আপনি CI/CD বিল্ড প্রক্রিয়ায় Data Connect SDK তৈরি করতে Firebase CLI ব্যবহার করতে পারেন।

firebase dataconnect:sdk:generate

Data Connect আইওএস এসডিকে শুরু করুন

Data Connect Data Connect ইনস্ট্যান্সটি চালু করুন (এই সমস্ত তথ্য Firebase কনসোলের Data Connect ট্যাবে পাওয়া যাবে)।

একটি কানেক্টর ইনস্ট্যান্স পাওয়া

আপনার কানেক্টরের জন্য কোডটি 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)")

একটি মুভি পুনরুদ্ধার করতে, আপনাকে একটি কোয়েরি রেফারেন্স ব্যবহার করতে হবে। সমস্ত কোয়েরি রেফারেন্সই হলো Observable পাবলিশার। কনফিগার করা পাবলিশারের উপর নির্ভর করে ( connector.yaml) , এগুলি হয় @Observable ম্যাক্রো (iOS 17+) সমর্থন করে অথবা ObservableObject প্রোটোকল প্রয়োগ করে। যদি কোনোটি নির্দিষ্ট করা না থাকে, তবে ডিফল্ট হিসেবে iOS 17+ এ সমর্থিত @Observable ম্যাক্রোটি ব্যবহৃত হয়।

একটি SwiftUI ভিউতে, আপনি কোয়েরি রেফের প্রকাশিত data ভেরিয়েবল ব্যবহার করে কোয়েরির ফলাফল বাইন্ড করতে পারেন এবং ডেটা আপডেট করার জন্য কোয়েরির execute() মেথড কল করতে পারেন। 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")

গণনা ক্ষেত্রগুলির পরিবর্তনগুলি পরিচালনা করুন

একটি অ্যাপের স্কিমাতে এনুমারেশন থাকতে পারে, যেগুলো আপনার GraphQL কোয়েরি দ্বারা অ্যাক্সেস করা যায়।

অ্যাপের ডিজাইন পরিবর্তনের সাথে সাথে, আপনি enum-সমর্থিত নতুন ভ্যালু যোগ করতে পারেন। উদাহরণস্বরূপ, কল্পনা করুন যে আপনার অ্যাপ্লিকেশনের লাইফসাইকেলের পরবর্তী পর্যায়ে আপনি AspectRatio enum-এ একটি FULLSCREEN ভ্যালু যোগ করার সিদ্ধান্ত নিয়েছেন।

Data Connect ওয়ার্কফ্লোতে, আপনি আপনার কোয়েরি এবং এসডিকে আপডেট করার জন্য স্থানীয় ডেভেলপমেন্ট টুলিং ব্যবহার করতে পারেন।

তবে, আপনার ক্লায়েন্টদের একটি আপডেট করা সংস্করণ প্রকাশ করার আগে, পুরোনো ডেপ্লয় করা ক্লায়েন্টগুলো অকার্যকর হয়ে যেতে পারে।

স্থিতিস্থাপক বাস্তবায়নের উদাহরণ

জেনারেটেড SDK অজানা মানগুলি পরিচালনা করতে বাধ্য করে, কারণ জেনারেটেড enum-গুলিতে একটি _UNKNOWN মান থাকে এবং Swift সম্পূর্ণ সুইচ স্টেটমেন্ট প্রয়োগ করে।

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
}

আপনার iOS অ্যাপ্লিকেশনটির প্রোটোটাইপ তৈরি করুন এবং পরীক্ষা করুন

স্থানীয় এমুলেটর ব্যবহার করার জন্য ক্লায়েন্টদের নির্দেশ দিন।

আপনি Data Connect এমুলেটরটি ডেটা কানেক্ট ভিএস কোড এক্সটেনশন থেকে অথবা সিএলআই থেকে ব্যবহার করতে পারেন।

উভয় ক্ষেত্রেই এমুলেটরের সাথে সংযোগ করার জন্য অ্যাপটিকে প্রস্তুত করার পদ্ধতি একই।

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 এসডিকে-তে ডেটা টাইপ

Data Connect সার্ভারটি সাধারণ এবং কাস্টম গ্রাফকিউএল ডেটা টাইপগুলো উপস্থাপন করে। এসডিকে-তে এগুলো নিম্নরূপে প্রদর্শিত হয়।

Data Connect ধরণ সুইফট
স্ট্রিং স্ট্রিং
ইন্ট ইন্ট
ভাসা দ্বিগুণ
বুলিয়ান বুল
UUID UUID
তারিখ ফায়ারবেস ডেটা কানেক্ট.লোকাল ডেট
টাইমস্ট্যাম্প ফায়ারবেসকোর.টাইমস্ট্যাম্প
Int64 Int64
যেকোনো FirebaseDataConnect.AnyValue