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

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

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

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

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

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

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

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

  1. আপনার Android অ্যাপে Firebase যোগ করুন।
  2. Gradle-এ ডিপেন্ডেন্সি হিসেবে SQL Connect কনফিগার করুন।
  3. Kotlin Serialization Gradle প্লাগ-ইন ও Gradle ডিপেনডেন্সি যোগ করুন।

তারপর:

  1. আপনার অ্যাপ স্কিমা ডেভেলপ করুন।
  2. SDK জেনারেশন সেট-আপ করুন:

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

  4. কোয়েরি ও মিউটেশনে কল করার সুবিধা প্রয়োগ করুন।

  5. SQL Connect এমুলেটর সেট-আপ ও ব্যবহার করুন এবং ইটারেট করুন।

আপনার Kotlin SDK জেনারেট করুন

আপনার অ্যাপে SQL Connect জেনারেট করা SDK সেট-আপ করতে Firebase CLI ব্যবহার করুন। init কমান্ডের মাধ্যমে বর্তমান ফোল্ডারে থাকা সব অ্যাপ শনাক্ত করা এবং জেনারেট করা SDK অটোমেটিক ইনস্টল করা উচিত।

firebase init dataconnect:sdk

প্রোটোটাইপ করার সময় SDK আপডেট করা

আপনার SQL Connect VS Code এক্সটেনশন ইনস্টল করা থাকলে, এটি সবসময় জেনারেট করা SDK আপ-টু-ডেট রাখবে।

আপনি SQL Connect VS Code এক্সটেনশন ব্যবহার না করলে, তৈরি করা SDK আপ-টু-ডেট রাখতে Firebase CLI ব্যবহার করতে পারেন।

firebase dataconnect:sdk:generate --watch

বিল্ড পাইপলাইনে SDK জেনারেট করুন

CI/CD বিল্ড প্রসেসে SQL Connect SDK জেনারেট করতে আপনি Firebase CLI ব্যবহার করতে পারবেন।

firebase dataconnect:sdk:generate

ক্লায়েন্ট কোড সেট-আপ করা

আপনার ক্লায়েন্ট কোডে SQL Connect যোগ করুন

SQL Connect এবং আপনার তৈরি করা SDK ব্যবহার করার জন্য আপনার ক্লায়েন্ট কোড সেট-আপ করতে, প্রথমে স্ট্যান্ডার্ড Firebase সেট-আপ নির্দেশাবলী অনুসরণ করুন।

তারপর, app/build.gradle.kts-এর plugins বিভাগে নিম্নলিখিতগুলি যোগ করুন:

// The Firebase team tests with version 1.8.22; however, other 1.8 versions,
// and all newer versions are expected work too.
kotlin("plugin.serialization") version "1.8.22" // MUST match the version of the Kotlin compiler

তারপর, app/build.gradle.kts-এর dependencies বিভাগে নিম্নলিখিত তথ্য যোগ করুন:

implementation(platform("com.google.firebase:firebase-bom:35.0.1"))
implementation("com.google.firebase:firebase-dataconnect")
implementation("com.google.firebase:firebase-auth") // Optional
implementation("com.google.firebase:firebase-appcheck") // Optional
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3") // Newer versions should work too
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1") // Newer versions should work too

SQL Connect Android SDK শুরু করা

SQL Connect সেট-আপ করার জন্য আপনি যে তথ্য ব্যবহার করেছেন তা ব্যবহার করে আপনার SQL Connect ইনস্ট্যান্স শুরু করুন। Firebase কনসোলের ডেটাবেস ও স্টোরেজ > SQL Connect পৃষ্ঠা থেকে এই তথ্য খুঁজে নিন।

ConnectorConfig অবজেক্ট

SDK-এর জন্য কানেক্টর কনফিগারেশন অবজেক্ট প্রয়োজন।

এই অবজেক্টটি dataconnect.yaml-এ serviceId ও location এবং connector.yaml-এ connectorId থেকে অটোমেটিক জেনারেট করা হয়েছে।

কানেক্টর ইনস্ট্যান্স পাওয়া হচ্ছে

আপনি এখন কনফিগারেশন অবজেক্ট সেট-আপ করেছেন, SQL Connect কানেক্টর ইনস্ট্যান্স পান। আপনার কানেক্টরের কোড SQL Connect এমুলেটর দ্বারা তৈরি করা হবে। আপনার কানেক্টরের নাম movies এবং Kotlin প্যাকেজ com.myapplication হলে, connector.yaml-এ যেমন উল্লেখ করা আছে, তাহলে এটি কল করে কানেক্টর অবজেক্ট ফিরিয়ে আনুন:

val connector = com.myapplication.MoviesConnector.instance

আপনার Android SDK থেকে কোয়েরি ও মিউটেশন ব্যবহার করুন

কানেক্টর অবজেক্টের সাহায্যে, আপনি 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
  }
}

তাহলে আপনি নিম্নলিখিত উপায়ে মুভি তৈরি ও ফিরিয়ে আনতে পারবেন:

val connector = MoviesConnector.instance

val addMovieResult1 = connector.createMovie.execute(
  title = "Empire Strikes Back",
  releaseYear = 1980,
  genre = "Sci-Fi",
  rating = 5
)

val movie1 = connector.getMovieByKey.execute(addMovieResult1.data.key)

println("Empire Strikes Back: ${movie1.data.movie}")

এছাড়াও, আপনি একাধিক সিনেমা খুঁজে পেতে পারেন:

val connector = MoviesConnector.instance

val addMovieResult2 = connector.createMovie.execute(
  title="Attack of the Clones",
  releaseYear = 2002,
  genre = "Sci-Fi",
  rating = 5
)

val listMoviesResult = connector.listMoviesByGenre.execute(genre = "Sci-Fi")

println(listMoviesResult.data.movies)

এছাড়াও, আপনি Flow সংগ্রহ করতে পারবেন যা কোয়েরির execute() পদ্ধতি কল করে নতুন কোয়েরি ফলাফল উদ্ধার করা হলে তবেই ফলাফল দেখাবে।

val connector = MoviesConnector.instance

connector.listMoviesByGenre.flow(genre = "Sci-Fi").collect { data ->
  println(data.movies)
}

connector.createMovie.execute(
  title="A New Hope",
  releaseYear = 1977,
  genre = "Sci-Fi",
  rating = 5
)

connector.listMoviesByGenre.execute(genre = "Sci-Fi") // will cause the Flow to get notified

রিয়েল-টাইম পরিবর্তন সংক্রান্ত বিজ্ঞপ্তি পেতে সাবস্ক্রাইব করুন

SQL Connect থেকে রিয়েল-টাইম আপডেট পান দেখুন।

এনিউমারেশন ফিল্ডে পরিবর্তন ম্যানেজ করা

অ্যাপের স্কিমায় এনিউমারেশন থাকতে পারে, যা আপনার GraphQL কোয়েরি অ্যাক্সেস করতে পারে।

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

SQL Connect ওয়ার্কফ্লোতে, আপনার কোয়েরি ও SDK আপডেট করতে আপনি লোকাল ডেভেলপমেন্ট টুলিং ব্যবহার করতে পারবেন।

তবে, আপনার ক্লায়েন্টের আপডেট করা ভার্সন রিলিজ করার আগে, আগে থেকে ডিপ্লয় করা ক্লায়েন্ট কাজ করা বন্ধ করে দিতে পারে।

রেজিলিয়েন্ট প্রয়োগের উদাহরণ

তৈরি করা SDK অজানা ভ্যালু ম্যানেজ করতে বাধ্য করে কারণ গ্রাহকের কোডকে অবশ্যই EnumValue অবজেক্ট আনর‍্যাপ করতে হবে, যা পরিচিত enum ভ্যালুর জন্য EnumValue.Known অথবা অজানা ভ্যালুর জন্য EnumValue.Unknown।

val result = connector.listMoviesByAspectRatio.execute(AspectRatio.WIDESCREEN)
val encounteredAspectRatios = mutableSetOf<String>()

result.data.movies
  .mapNotNull { it.otherAspectRatios }
  .forEach { otherAspectRatios ->
    otherAspectRatios
      .filterNot { it.value == AspectRatio.WIDESCREEN }
      .forEach {
        when (it) {
          is EnumValue.Known -> encounteredAspectRatios.add(it.value.name)
          is EnumValue.Unknown ->
            encounteredAspectRatios.add("[unknown ratio: ${it.stringValue}]")
        }
      }
  }

println(
  "Widescreen movies also include additional aspect ratios: " +
    encounteredAspectRatios.sorted().joinToString()
)

ক্লায়েন্ট-সাইড ক্যাশিং চালু করুন

SQL Connect-এ একটি ঐচ্ছিক ক্লায়েন্ট-সাইড ক্যাশিং ফিচার আছে, যা আপনি connector.yaml ফাইল এডিট করে চালু করতে পারবেন। এই ফিচার চালু করা হলে, তৈরি করা ক্লায়েন্ট SDK স্থানীয়ভাবে কোয়েরির উত্তর ক্যাশে করবে, যা আপনার অ্যাপের করা ডেটাবেস অনুরোধের সংখ্যা কমাতে পারে এবং নেটওয়ার্ক উপলভ্যতা বিঘ্নিত হলে আপনার অ্যাপের ডেটাবেসের উপর নির্ভরশীল অংশগুলিকে কাজ করার জন্য সক্ষম করে।

ক্লায়েন্ট-সাইড ক্যাশিং চালু করতে, আপনার কানেক্টর কনফিগারেশনে ক্লায়েন্ট ক্যাশিং কনফিগারেশন যোগ করুন:

generate:
  kotlinSdk:
    outputDir: "../android"
    package: "com.google.firebase.dataconnect.generated"
    clientCache:
      maxAge: 5s
      storage: persistent

এই কনফিগারেশনে দুটি প্যারামিটার আছে, দুটিই ঐচ্ছিক:

  • maxAge: ক্লায়েন্ট SDK নতুন ভ্যালু নিয়ে আসার আগে ক্যাশে করা উত্তরের সর্বাধিক বয়স। যেমন: "0", "30s", "1h30m"।

    maxAge-এর ডিফল্ট ভ্যালু হল 0, যার অর্থ হল উত্তর ক্যাশে করা হয়, কিন্তু ক্লায়েন্ট SDK সবসময় নতুন ভ্যালু নিয়ে আসবে। ক্যাশে করা ভ্যালু শুধুমাত্র তখনই ব্যবহার করা হবে যখন CACHE_ONLY-কে execute() হিসেবে নির্দিষ্ট করা হবে।

  • storage: ক্লায়েন্ট SDK-কে এমনভাবে কনফিগার করা যেতে পারে যাতে এটি persistent স্টোরেজ বা memory-এ উত্তর ক্যাশে করতে পারে। persistent স্টোরেজে ক্যাশে করা ফলাফল অ্যাপ রিস্টার্ট করার পরেও থেকে যাবে। Android SDK-তে, ডিফল্ট হল persistent।

আপনার কানেক্টরের ক্যাশিং কনফিগারেশন আপডেট করার পরে, আপনার ক্লায়েন্ট SDK আবার তৈরি করুন এবং আপনার অ্যাপ আবার তৈরি করুন। আপনি এটি করার পরে, execute() আপনার কনফিগার করা নীতি অনুযায়ী প্রতিক্রিয়া ক্যাশে করবে এবং ক্যাশে করা মান ব্যবহার করবে। এটি সাধারণত অটোমেটিক হয়, আপনাকে কোনও অতিরিক্ত পদক্ষেপ নিতে হয় না; তবে, নিম্নলিখিত বিষয়গুলি মনে রাখবেন:

  • execute()-এর ডিফল্ট অ্যাকশন উপরে বর্ণনা করা হয়েছে: কোনও কোয়েরির জন্য ফলাফল ক্যাশে করা থাকলে এবং ক্যাশে করা ভ্যালু maxAge-এর চেয়ে পুরনো না হলে, ক্যাশে করা ভ্যালু ব্যবহার করুন। এই ডিফল্ট অ্যাকশনকে PREFER_CACHE নীতি বলা হয়।

    এছাড়াও, আপনি execute()-এর স্বতন্ত্র ইনভোকেশন নির্দিষ্ট করতে পারেন যাতে শুধুমাত্র ক্যাশে করা ভ্যালু (CACHE_ONLY) পরিবেশন করা যায় অথবা সার্ভার থেকে (SERVER_ONLY) নতুন ভ্যালু শর্তহীনভাবে আনা যায়।

    val queryResult = queryRef.execute(QueryRef.FetchPolicy.CACHE_ONLY)
    
    val queryResult = queryRef.execute(QueryRef.FetchPolicy.SERVER_ONLY)
    

    আপনার Android অ্যাপ্লিকেশনের প্রোটোটাইপ তৈরি ও পরীক্ষা করা

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

    আপনি SQL Connect এমুলেটর ব্যবহার করতে পারেন, তা SQL Connect VS Code এক্সটেনশন বা CLI থেকে হোক না কেন।

    এমুলেটরের সাথে কানেক্ট করার জন্য অ্যাপ ইন্সট্রুমেন্ট করা দুটি ক্ষেত্রেই একই রকম।

    val connector = MoviesConnector.instance
    
    // Connect to the emulator on "10.0.2.2:9399"
    connector.dataConnect.useEmulator()
    
    // (alternatively) if you're running your emulator on non-default port:
    connector.dataConnect.useEmulator(port = 9999)
    
    // Make calls from your app
    
    

    প্রোডাকশন রিসোর্সে পরিবর্তন করতে, এমুলেটরে কানেক্ট করার জন্য লাইনগুলি কমেন্ট হিসেবে চিহ্নিত করুন।

    SQL Connect SDK-তে SQL-এর ধরন

    SQL Connect সার্ভার সাধারণ ও কাস্টম GraphQL ডেটার ধরন দেখায়। SDK-তে এগুলি নিম্নলিখিতভাবে দেখানো হয়।

    SQL Connect ধরন Kotlin
    স্ট্রিং স্ট্রিং
    Int Int (৩২-বিট পূর্ণসংখ্যা)
    Float ডবল (64-বিট ফ্লোট)
    Boolean Boolean
    UUID java.util.UUID
    তারিখ com.google.firebase.dataconnect.LocalDate (was java.util.Date until 16.0.0-beta03)
    টাইমস্ট্যাম্প com.google.firebase.Timestamp
    Int64 দীর্ঘ
    যেকোনও com.google.firebase.dataconnect.AnyValue