Firebase Data Connect ক্লায়েন্ট SDK-গুলো আপনাকে একটি ফায়ারবেস অ্যাপ থেকে সরাসরি আপনার সার্ভার-সাইড কোয়েরি এবং মিউটেশন কল করার সুযোগ দেয়। আপনার Data Connect সার্ভিসে যে স্কিমা, কোয়েরি এবং মিউটেশনগুলো ডেপ্লয় করবেন, সেগুলোর ডিজাইন করার পাশাপাশি আপনি একটি কাস্টম ক্লায়েন্ট SDK তৈরি করেন। তারপর, এই SDK-এর মেথডগুলো আপনার ক্লায়েন্ট লজিকে ইন্টিগ্রেট করেন।
আমরা অন্যত্র যেমন উল্লেখ করেছি, এটা মনে রাখা গুরুত্বপূর্ণ যে Data Connect কোয়েরি এবং মিউটেশনগুলো ক্লায়েন্ট কোড দ্বারা সাবমিট করা হয় না এবং সার্ভারে এক্সিকিউট করা হয় না। পরিবর্তে, ডেপ্লয় করার সময়, Data Connect অপারেশনগুলো ক্লাউড ফাংশনের মতো সার্ভারে সংরক্ষিত হয়। এর মানে হলো, বিদ্যমান ব্যবহারকারীদের (উদাহরণস্বরূপ, অ্যাপের পুরোনো সংস্করণগুলোতে) সমস্যা এড়াতে আপনাকে সংশ্লিষ্ট ক্লায়েন্ট-সাইড পরিবর্তনগুলো ডেপ্লয় করতে হবে।
এই কারণেই Data Connect আপনাকে এমন একটি ডেভেলপার এনভায়রনমেন্ট এবং টুলিং প্রদান করে, যা দিয়ে আপনি আপনার সার্ভারে ডেপ্লয় করা স্কিমা, কোয়েরি এবং মিউটেশনগুলোর প্রোটোটাইপ তৈরি করতে পারেন। এছাড়াও, আপনি প্রোটোটাইপ করার সময়েই এটি স্বয়ংক্রিয়ভাবে ক্লায়েন্ট-সাইড SDK তৈরি করে দেয়।
যখন আপনি আপনার পরিষেবা এবং ক্লায়েন্ট অ্যাপগুলিতে আপডেটগুলি পুনরাবৃত্তি করবেন, তখন সার্ভার- এবং ক্লায়েন্ট-সাইড উভয় আপডেটই স্থাপনের জন্য প্রস্তুত হয়ে যাবে।
ক্লায়েন্ট ডেভেলপমেন্ট ওয়ার্কফ্লো কী?
আপনি যদি ' Get started' অংশটি অনুসরণ করে থাকেন, তাহলে আপনাকে Data Connect এর সামগ্রিক ডেভেলপমেন্ট ফ্লো-এর সাথে পরিচয় করিয়ে দেওয়া হয়েছে। এই গাইডে, আপনি আপনার স্কিমা থেকে অ্যান্ড্রয়েড SDK তৈরি করা এবং ক্লায়েন্ট কোয়েরি ও মিউটেশন নিয়ে কাজ করার বিষয়ে আরও বিস্তারিত তথ্য পাবেন।
সংক্ষেপে, আপনার ক্লায়েন্ট অ্যাপে তৈরি করা অ্যান্ড্রয়েড এসডিকে ব্যবহার করতে হলে, আপনাকে এই পূর্বশর্তমূলক ধাপগুলো অনুসরণ করতে হবে:
- আপনার অ্যান্ড্রয়েড অ্যাপে ফায়ারবেস যুক্ত করুন।
- Gradle-এ Data Connect একটি ডিপেন্ডেন্সি হিসেবে কনফিগার করুন।
- Kotlin Serialization Gradle প্লাগইন এবং Gradle ডিপেন্ডেন্সি যোগ করুন।
তারপর:
- আপনার অ্যাপের স্কিমা তৈরি করুন।
SDK জেনারেশন সেট আপ করুন:
- আমাদের Data Connect VS Code এক্সটেনশনে থাকা 'Add SDK to app' বাটনটির মাধ্যমে
- আপনার
connector.yamlআপডেট করার মাধ্যমে
আপনার ক্লায়েন্ট কোড শুরু করুন এবং লাইব্রেরিগুলো ইম্পোর্ট করুন ।
Data Connect এমুলেটরটি সেট আপ করে ব্যবহার করুন এবং পুনরাবৃত্তি করুন।
আপনার কোটলিন এসডিকে তৈরি করুন
আপনার অ্যাপগুলিতে Data Connect তৈরি SDK সেট আপ করতে Firebase CLI ব্যবহার করুন। init কমান্ডটি বর্তমান ফোল্ডারের সমস্ত অ্যাপ সনাক্ত করবে এবং তৈরি করা SDK-গুলি স্বয়ংক্রিয়ভাবে ইনস্টল করবে।
firebase init dataconnect:sdk
প্রোটোটাইপিং করার সময় SDK আপডেট করুন।
আপনার যদি ডেটা কানেক্ট ভিএস কোড এক্সটেনশন ইনস্টল করা থাকে, তাহলে এটি তৈরি করা এসডিকে-গুলোকে সর্বদা হালনাগাদ রাখবে।
আপনি যদি ডেটা কানেক্ট ভিএস কোড এক্সটেনশন ব্যবহার না করেন, তাহলে জেনারেট করা এসডিকে-গুলো আপ-টু-ডেট রাখতে ফায়ারবেস সিএলআই ব্যবহার করতে পারেন।
firebase dataconnect:sdk:generate --watchবিল্ড পাইপলাইনে SDK তৈরি করুন
আপনি CI/CD বিল্ড প্রসেসে ডেটা কানেক্ট SDK তৈরি করতে Firebase CLI ব্যবহার করতে পারেন।
firebase dataconnect:sdk:generateক্লায়েন্ট কোড সেট আপ করুন
আপনার ক্লায়েন্ট কোডে Data Connect অন্তর্ভুক্ত করুন।
Data Connect এবং আপনার তৈরি করা এসডিকে ব্যবহার করার জন্য ক্লায়েন্ট কোড সেট আপ করতে, প্রথমে ফায়ারবেসের সাধারণ সেটআপ নির্দেশাবলী অনুসরণ করুন।
এরপর, 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:34.11.0"))
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
Data Connect অ্যান্ড্রয়েড এসডিকে শুরু করুন
ডেটা কানেক্ট সেট আপ করার জন্য আপনি যে তথ্য ব্যবহার করেছিলেন, তা দিয়ে আপনার ডেটা Data Connect ইনস্ট্যান্সটি চালু করুন (এই সমস্ত তথ্য Firebase কনসোলের ডেটা কানেক্ট ট্যাবে পাওয়া যাবে)।
ConnectorConfig অবজেক্ট
এসডিকে-টির জন্য একটি কানেক্টর কনফিগারেশন অবজেক্ট প্রয়োজন।
এই অবজেক্টটি dataconnect.yaml এর serviceId ও location এবং connector.yaml এর connectorId থেকে স্বয়ংক্রিয়ভাবে তৈরি হয়।
একটি কানেক্টর ইনস্ট্যান্স পাওয়া
এখন যেহেতু আপনি একটি কনফিগারেশন অবজেক্ট সেট আপ করেছেন, একটি Data Connect কানেক্টর ইনস্ট্যান্স নিন। আপনার কানেক্টরের জন্য কোডটি Data Connect এমুলেটর দ্বারা তৈরি করা হবে। যদি আপনার কানেক্টরের নাম movies হয় এবং কোটলিন প্যাকেজটি com.myapplication হয়, যেমনটি connector.yaml এ উল্লেখ করা আছে, তাহলে নিম্নলিখিত কমান্ডটি কল করে কানেক্টর অবজেক্টটি পুনরুদ্ধার করুন:
val connector = com.myapplication.MoviesConnector.instance
আপনার অ্যান্ড্রয়েড এসডিকে থেকে কোয়েরি এবং মিউটেশন ব্যবহার করুন
কানেক্টর অবজেক্টের সাহায্যে, আপনি 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
গণনা ক্ষেত্রগুলির পরিবর্তনগুলি পরিচালনা করুন
একটি অ্যাপের স্কিমাতে এনুমারেশন থাকতে পারে, যেগুলো আপনার GraphQL কোয়েরি দ্বারা অ্যাক্সেস করা যায়।
অ্যাপের ডিজাইন পরিবর্তনের সাথে সাথে, আপনি enum-সমর্থিত নতুন ভ্যালু যোগ করতে পারেন। উদাহরণস্বরূপ, কল্পনা করুন যে আপনার অ্যাপ্লিকেশনের লাইফসাইকেলের পরবর্তী পর্যায়ে আপনি AspectRatio enum-এ একটি FULLSCREEN ভ্যালু যোগ করার সিদ্ধান্ত নিয়েছেন।
Data Connect ওয়ার্কফ্লোতে, আপনি আপনার কোয়েরি এবং এসডিকে আপডেট করার জন্য স্থানীয় ডেভেলপমেন্ট টুলিং ব্যবহার করতে পারেন।
তবে, আপনার ক্লায়েন্টদের একটি আপডেট করা সংস্করণ প্রকাশ করার আগে, পুরোনো ক্লায়েন্টগুলো অকার্যকর হয়ে যেতে পারে।
স্থিতিস্থাপক বাস্তবায়নের উদাহরণ
তৈরি করা SDK অজানা মানগুলি পরিচালনা করতে বাধ্য করে, কারণ গ্রাহকের কোডকে অবশ্যই EnumValue অবজেক্টটি আনর্যাপ করতে হয়, যা পরিচিত এনাম মানগুলির জন্য 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()
)
আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটির প্রোটোটাইপ তৈরি করুন এবং পরীক্ষা করুন।
স্থানীয় এমুলেটর ব্যবহার করার জন্য ক্লায়েন্টদের নির্দেশ দিন।
আপনি Data Connect এমুলেটরটি ডেটা কানেক্ট ভিএস কোড এক্সটেনশন থেকে অথবা সিএলআই থেকে ব্যবহার করতে পারেন।
উভয় ক্ষেত্রেই এমুলেটরের সাথে সংযোগ করার জন্য অ্যাপটিকে প্রস্তুত করার পদ্ধতি একই।
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
প্রোডাকশন রিসোর্সে স্যুইচ করতে, এমুলেটরের সাথে সংযোগ করার লাইনগুলো কমেন্ট আউট করুন।
Data Connect এসডিকে-তে ডেটা টাইপ
Data Connect সার্ভারটি সাধারণ এবং কাস্টম গ্রাফকিউএল ডেটা টাইপগুলো উপস্থাপন করে। এসডিকে-তে এগুলো নিম্নরূপে প্রদর্শিত হয়।
| ডেটা সংযোগের ধরণ | কোটলিন |
|---|---|
| স্ট্রিং | স্ট্রিং |
| ইন্ট | Int (৩২-বিট পূর্ণসংখ্যা) |
| ভাসা | ডাবল (৬৪-বিট ফ্লোট) |
| বুলিয়ান | বুলিয়ান |
| UUID | java.util.UUID |
| তারিখ | com.google.firebase.dataconnect.LocalDate (যা 16.0.0-beta03 সংস্করণ পর্যন্ত java.util.Date নামে পরিচিত ছিল) |
| টাইমস্ট্যাম্প | com.google.firebase.Timestamp |
| Int64 | দীর্ঘ |
| যেকোনো | com.google.firebase.dataconnect.AnyValue |