Firebase এবং Jetpack Compose দিয়ে একটি Android অ্যাপ তৈরি করুন

1. ভূমিকা

শেষ আপডেট: 2022-11-16

ফায়ারবেস এবং জেটপ্যাক কম্পোজ সহ একটি Android অ্যাপ তৈরি করা

এই কোডল্যাবে, আপনি Make It So নামে একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করবেন। এই অ্যাপের UI সম্পূর্ণরূপে জেটপ্যাক কম্পোজ দিয়ে তৈরি করা হয়েছে, যা নেটিভ UI তৈরির জন্য অ্যান্ড্রয়েডের আধুনিক টুলকিট - এটি স্বজ্ঞাত এবং .xml ফাইলগুলি লেখার চেয়ে কম কোডের প্রয়োজন হয় এবং সেগুলিকে অ্যাক্টিভিটি, ফ্র্যাগমেন্টস বা ভিউতে আবদ্ধ করে৷

ফায়ারবেস এবং জেটপ্যাক কম্পোজ একসাথে কতটা ভাল কাজ করে তা বোঝার প্রথম ধাপ হল আধুনিক অ্যান্ড্রয়েড আর্কিটেকচার বোঝা। একটি ভাল আর্কিটেকচার সিস্টেমটিকে বোঝা সহজ, বিকাশ করা সহজ এবং রক্ষণাবেক্ষণ করা সহজ করে তোলে, যেহেতু এটি উপাদানগুলি কীভাবে সংগঠিত হয় এবং একে অপরের সাথে যোগাযোগ করে তা খুব স্পষ্ট করে তোলে। অ্যান্ড্রয়েড বিশ্বে, প্রস্তাবিত আর্কিটেকচারটিকে মডেল - ভিউ - ভিউমডেল বলা হয়। মডেলটি সেই স্তরটিকে প্রতিনিধিত্ব করে যা অ্যাপ্লিকেশনটিতে ডেটা অ্যাক্সেস করে। ভিউ হল UI স্তর এবং ব্যবসায়িক যুক্তি সম্পর্কে কিছুই জানা উচিত নয়। এবং ViewModel হল যেখানে ব্যবসায়িক যুক্তি প্রয়োগ করা হয়, যার জন্য কখনও কখনও ViewModel-কে মডেল স্তর কল করতে হয়।

জেটপ্যাক কম্পোজের সাহায্যে তৈরি একটি অ্যান্ড্রয়েড অ্যাপে মডেল - ভিউ - ভিউমডেল কীভাবে প্রয়োগ করা হয় তা বোঝার জন্য আমরা এই নিবন্ধটি পড়ার দৃঢ়ভাবে সুপারিশ করছি, কারণ এটি কোডবেসকে বোঝা সহজ করে দেবে এবং পরবর্তী পদক্ষেপগুলি সম্পূর্ণ করা সহজ করে দেবে৷

আপনি কি নির্মাণ করবেন

মেক ইট সো হল একটি সহজ করণীয় তালিকা অ্যাপ্লিকেশন যা ব্যবহারকারীকে কার্যগুলি যোগ এবং সম্পাদনা করতে, পতাকা, অগ্রাধিকার এবং নির্ধারিত তারিখগুলি যোগ করতে এবং কাজগুলিকে সম্পন্ন হিসাবে চিহ্নিত করতে দেয়৷ নীচের চিত্রগুলি এই অ্যাপ্লিকেশনটির দুটি প্রধান পৃষ্ঠা দেখায়: টাস্ক তৈরি পৃষ্ঠা এবং তৈরি করা কাজের তালিকা সহ প্রধান পৃষ্ঠা৷

এটি তৈরি করুন তাই টাস্ক স্ক্রিন যুক্ত করুনএটা তাই হোম স্ক্রীন করুন

আপনি এই অ্যাপে অনুপস্থিত কিছু বৈশিষ্ট্য যোগ করবেন:

  • ইমেল এবং পাসওয়ার্ড দিয়ে ব্যবহারকারীদের প্রমাণীকরণ করুন
  • একটি ফায়ারস্টোর সংগ্রহে একজন শ্রোতা যোগ করুন এবং UI পরিবর্তনের প্রতিক্রিয়া তৈরি করুন
  • অ্যাপে নির্দিষ্ট কোডের কর্মক্ষমতা নিরীক্ষণ করতে কাস্টম ট্রেস যোগ করুন
  • রিমোট কনফিগারেশন ব্যবহার করে একটি ফিচার টগল তৈরি করুন এবং এটি চালু করতে স্টেজড রোলআউট ব্যবহার করুন

আপনি কি শিখবেন

  • একটি আধুনিক অ্যান্ড্রয়েড অ্যাপ্লিকেশনে ফায়ারবেস প্রমাণীকরণ, পারফরম্যান্স মনিটরিং, রিমোট কনফিগারেশন এবং ক্লাউড ফায়ারস্টোর কীভাবে ব্যবহার করবেন
  • একটি MVVM আর্কিটেকচারে ফায়ারবেস এপিআই কীভাবে ফিট করা যায়
  • একটি কম্পোজ UI-তে Firebase API-এর মাধ্যমে করা পরিবর্তনগুলি কীভাবে প্রতিফলিত করবেন

আপনি কি প্রয়োজন হবে

2. নমুনা অ্যাপ পান এবং Firebase সেট আপ করুন

নমুনা অ্যাপের কোড পান

কমান্ড লাইন থেকে GitHub সংগ্রহস্থল ক্লোন করুন:

git clone https://github.com/FirebaseExtended/make-it-so-android.git

একটি ফায়ারবেস প্রকল্প তৈরি করুন

আপনাকে প্রথমে যা করতে হবে তা হল Firebase কনসোলে যান এবং "+ প্রকল্প যোগ করুন" বোতামে ক্লিক করে একটি ফায়ারবেস প্রকল্প তৈরি করুন, আপনি নীচে দেখতে পাচ্ছেন:

ফায়ারবেস কনসোল

প্রকল্প তৈরি সম্পূর্ণ করতে স্ক্রিনে পদক্ষেপগুলি অনুসরণ করুন।

আপনার Firebase প্রকল্পে একটি Android অ্যাপ যোগ করুন

আপনার Firebase প্রকল্পে, আপনি বিভিন্ন অ্যাপ নিবন্ধন করতে পারেন: Android, iOS, Web, Flutter এবং Unity-এর জন্য।

অ্যান্ড্রয়েড বিকল্পটি চয়ন করুন, যেমন আপনি এখানে দেখছেন:

ফায়ারবেস প্রকল্প ওভারভিউ

তারপর এই পদক্ষেপগুলি অনুসরণ করুন:

  1. প্যাকেজের নাম হিসেবে com.example.makeitso লিখুন এবং ঐচ্ছিকভাবে, একটি ডাকনাম লিখুন। এই কোডল্যাবের জন্য, আপনাকে ডিবাগ সাইনিং সার্টিফিকেট যোগ করতে হবে না।
  2. আপনার অ্যাপ রেজিস্টার করতে এবং Firebase কনফিগার ফাইল অ্যাক্সেস করতে Next এ ক্লিক করুন।
  3. আপনার কনফিগারেশন ফাইল ডাউনলোড করতে এবং make-it-so-android/app ডিরেক্টরিতে সংরক্ষণ করতে ডাউনলোড করুন google-services.json এ ক্লিক করুন।
  4. পরবর্তী ক্লিক করুন. যেহেতু Firebase SDK গুলি ইতিমধ্যেই নমুনা প্রকল্পের build.gradle ফাইলে অন্তর্ভুক্ত করা হয়েছে, পরবর্তী ধাপে যেতে Next এ ক্লিক করুন।
  5. শেষ করতে কনসোল করতে অবিরত ক্লিক করুন।

মেক ইট সো অ্যাপটি সঠিকভাবে কাজ করার জন্য, কোডে যাওয়ার আগে আপনাকে কনসোলে দুটি জিনিস করতে হবে: প্রমাণীকরণ প্রদানকারীকে সক্ষম করুন এবং ফায়ারস্টোর ডেটাবেস তৈরি করুন।

প্রমাণীকরণ সেট আপ করুন

প্রথমে, আসুন প্রমাণীকরণ সক্ষম করি যাতে ব্যবহারকারীরা অ্যাপে লগ ইন করতে পারে:

  1. বিল্ড মেনু থেকে, প্রমাণীকরণ নির্বাচন করুন এবং তারপর শুরু করুন ক্লিক করুন।
  2. সাইন-ইন পদ্ধতি কার্ড থেকে, ইমেল/পাসওয়ার্ড নির্বাচন করুন এবং এটি সক্রিয় করুন।
  3. এরপরে, নতুন প্রদানকারী যোগ করুন ক্লিক করুন এবং বেনামী নির্বাচন করুন এবং সক্ষম করুন।

ক্লাউড ফায়ারস্টোর সেট আপ করুন

এরপর, Firestore সেট আপ করুন। সাইন-ইন করা ব্যবহারকারীর কাজগুলি সংরক্ষণ করতে আপনি Firestore ব্যবহার করবেন। প্রতিটি ব্যবহারকারী ডাটাবেসের সংগ্রহের মধ্যে তাদের নিজস্ব নথি পাবেন।

  1. Firebase কনসোলের বাম-প্যানেলে, বিল্ড প্রসারিত করুন এবং তারপর Firestore ডাটাবেস নির্বাচন করুন।
  2. ডাটাবেস তৈরি করুন ক্লিক করুন।
  3. ডাটাবেস আইডি (default) এ সেট করুন।
  4. আপনার ডাটাবেসের জন্য একটি অবস্থান নির্বাচন করুন, তারপর পরবর্তী ক্লিক করুন।
    একটি বাস্তব অ্যাপের জন্য, আপনি এমন একটি অবস্থান বেছে নিতে চান যা আপনার ব্যবহারকারীদের কাছাকাছি।
  5. স্টার্ট ইন টেস্ট মোডে ক্লিক করুন। নিরাপত্তা নিয়ম সম্পর্কে দাবিত্যাগ পড়ুন.
    এই বিভাগের পরবর্তী ধাপে, আপনি আপনার ডেটা সুরক্ষিত করতে নিরাপত্তা নিয়ম যোগ করবেন। আপনার ডাটাবেসের জন্য নিরাপত্তা বিধি যোগ না করে সর্বজনীনভাবে কোনো অ্যাপ বিতরণ বা প্রকাশ করবেন না
  6. তৈরি করুন ক্লিক করুন।

ফায়ারস্টোর ডাটাবেসে দৃঢ় নিরাপত্তা বিধি তৈরি করার জন্য একটু সময় নেওয়া যাক।

  1. ফায়ারস্টোর ড্যাশবোর্ড খুলুন এবং নিয়ম ট্যাবে যান।
  2. এই মত দেখতে নিরাপত্তা নিয়ম আপডেট করুন:
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow create: if request.auth != null;
      allow read, update, delete: if request.auth != null && resource.data.userId == request.auth.uid;
    }
  }
}

এই নিয়মগুলি মূলত বলে যে অ্যাপের যে কোনও সাইন-ইন করা ব্যবহারকারী যে কোনও সংগ্রহের মধ্যে নিজের জন্য একটি নথি তৈরি করতে পারেন। তারপর, একবার তৈরি হয়ে গেলে, শুধুমাত্র সেই ব্যবহারকারী যিনি সেই নথিটি তৈরি করেছেন তারা সেই নথিটি দেখতে, আপডেট করতে বা মুছতে সক্ষম হবেন৷

অ্যাপ্লিকেশন চালান

এখন আপনি অ্যাপ্লিকেশন চালানোর জন্য প্রস্তুত! অ্যান্ড্রয়েড স্টুডিওতে make-it-so-android/start ফোল্ডারটি খুলুন এবং অ্যাপটি চালান (এটি একটি অ্যান্ড্রয়েড এমুলেটর বা একটি আসল অ্যান্ড্রয়েড ডিভাইস ব্যবহার করে করা যেতে পারে)।

3. ফায়ারবেস প্রমাণীকরণ

আপনি কোন বৈশিষ্ট্য যোগ করতে যাচ্ছেন?

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

কোড করার সময়!

ব্যবহারকারী একটি অ্যাকাউন্ট তৈরি করার সাথে সাথে, একটি ইমেল এবং একটি পাসওয়ার্ড টাইপ করে, আপনাকে একটি ইমেল শংসাপত্রের জন্য Firebase প্রমাণীকরণ API জিজ্ঞাসা করতে হবে, তারপর নতুন শংসাপত্রটিকে বেনামী অ্যাকাউন্টে লিঙ্ক করতে হবে৷ অ্যান্ড্রয়েড স্টুডিওতে AccountServiceImpl.kt ফাইলটি খুলুন এবং linkAccount ফাংশন আপডেট করুন যাতে এটি নিম্নলিখিতগুলির মতো দেখায়:

model/service/impl/AccountServiceImpl.kt

override suspend fun linkAccount(email: String, password: String) {
    val credential = EmailAuthProvider.getCredential(email, password)
    auth.currentUser!!.linkWithCredential(credential).await()
}

এখন SignUpViewModel.kt খুলুন এবং onSignUpClick ফাংশনের launchCatching ব্লকের ভিতরে পরিষেবা linkAccount ফাংশনটিকে কল করুন:

screens/sign_up/SignUpViewModel.kt

launchCatching {
    accountService.linkAccount(email, password)
    openAndPopUp(SETTINGS_SCREEN, SIGN_UP_SCREEN)
}

প্রথমে এটি প্রমাণীকরণের চেষ্টা করে, এবং যদি কলটি সফল হয়, এটি পরবর্তী স্ক্রিনে ( SettingsScreen ) চলে যায়। যেহেতু আপনি একটি launchCatching ব্লকের মধ্যে এই কলগুলি চালাচ্ছেন, যদি প্রথম লাইনে একটি ত্রুটি ঘটে, তবে ব্যতিক্রমটি ধরা হবে এবং পরিচালনা করা হবে এবং দ্বিতীয় লাইনে পৌঁছানো যাবে না।

SettingsScreen আবার খোলার সাথে সাথে, আপনাকে নিশ্চিত করতে হবে যে সাইন ইন এবং অ্যাকাউন্ট তৈরি করার বিকল্পগুলি চলে গেছে, কারণ এখন ব্যবহারকারী ইতিমধ্যেই প্রমাণীকৃত। এটি করার জন্য, অ্যাকাউন্টটি বেনামী কিনা তা পরীক্ষা করার জন্য বর্তমান ব্যবহারকারীর অবস্থা ( AccountService.kt এ উপলব্ধ) শোনার জন্য SettingsViewModel তৈরি করা যাক। এটি করার জন্য, SettingsViewModel.ktuiState আপডেট করুন নিচের মত দেখতে:

screens/settings/SettingsViewModel.kt

val uiState = accountService.currentUser.map {
    SettingsUiState(it.isAnonymous)
}

SettingsViewModel দ্বারা নির্গত রাজ্যগুলি সংগ্রহ করতে SettingsScreen.ktuiState আপডেট করতে আপনাকে শেষ জিনিসটি করতে হবে:

screens/settings/SettingsScreen.kt

val uiState by viewModel.uiState.collectAsState(
    initial = SettingsUiState(false)
)

এখন প্রতিবার ব্যবহারকারীর পরিবর্তন হলে, ব্যবহারকারীর নতুন প্রমাণীকরণের অবস্থা অনুযায়ী বিকল্পগুলি প্রদর্শন করতে SettingsScreen নিজেকে পুনরায় সংকলন করবে।

পরীক্ষা করার সময়!

মেক ইট সো চালান এবং স্ক্রিনের উপরের ডানদিকের কোণায় গিয়ার আইকনে ক্লিক করে সেটিংসে নেভিগেট করুন। সেখান থেকে, create account অপশনে ক্লিক করুন:

এটি তাই সেটিংস স্ক্রীন করুনএটি তৈরি করুন তাই সাইন আপ স্ক্রীন

আপনার অ্যাকাউন্ট তৈরি করতে একটি বৈধ ইমেল এবং একটি শক্তিশালী পাসওয়ার্ড টাইপ করুন৷ এটি কাজ করবে এবং আপনাকে সেটিংস পৃষ্ঠায় পুনঃনির্দেশিত করা উচিত, যেখানে আপনি দুটি নতুন বিকল্প দেখতে পাবেন: সাইন আউট করতে এবং আপনার অ্যাকাউন্ট মুছে ফেলতে৷ আপনি ব্যবহারকারী ট্যাবে ক্লিক করে Firebase কনসোলে প্রমাণীকরণ ড্যাশবোর্ডে তৈরি করা নতুন অ্যাকাউন্টটি পরীক্ষা করতে পারেন।

4. ক্লাউড ফায়ারস্টোর

আপনি কোন বৈশিষ্ট্য যোগ করতে যাচ্ছেন?

ক্লাউড ফায়ারস্টোরের জন্য, আপনি Firestore সংগ্রহে একজন শ্রোতাকে যুক্ত করবেন যা মেক ইট সো- তে প্রদর্শিত কার্যগুলিকে প্রতিনিধিত্ব করে এমন নথি সংরক্ষণ করে। একবার আপনি এই শ্রোতাকে যোগ করলে, আপনি এই সংগ্রহে করা প্রতিটি আপডেট পাবেন।

কোড করার সময়!

এইরকম দেখতে StorageServiceImpl.kt তে উপলব্ধ Flow আপডেট করুন:

model/service/impl/StorageServiceImpl.kt

override val tasks: Flow<List<Task>>
    get() =
      auth.currentUser.flatMapLatest { user ->
        firestore.collection(TASK_COLLECTION).whereEqualTo(USER_ID_FIELD, user.id).dataObjects()
      }

এই কোড user.id এর উপর ভিত্তি করে টাস্ক সংগ্রহে একজন শ্রোতা যোগ করছে। প্রতিটি টাস্ককে tasks নামে একটি সংগ্রহে একটি ডকুমেন্ট দ্বারা প্রতিনিধিত্ব করা হয়, এবং তাদের প্রত্যেকটির userId নামে একটি ক্ষেত্র রয়েছে। দয়া করে মনে রাখবেন যে currentUser ব্যবহারকারীর স্থিতি পরিবর্তন হলে একটি নতুন Flow নির্গত হবে (উদাহরণস্বরূপ সাইন আউট করে)।

এখন আপনাকে TasksViewModel.ktFlow পরিষেবার মতোই প্রতিফলিত করতে হবে:

screens/tasks/TasksViewModel.kt

val tasks = storageService.tasks

এবং শেষ জিনিসটি হবে TasksScreens.ktcomposable function তৈরি করা, যা UI-এর প্রতিনিধিত্ব করে, এই প্রবাহ সম্পর্কে সচেতন থাকুন এবং এটিকে একটি রাষ্ট্র হিসাবে সংগ্রহ করুন। যতবারই স্টেট পরিবর্তিত হয়, কম্পোজেবল ফাংশনটি স্বয়ংক্রিয়ভাবে কম্পোজ করবে এবং ব্যবহারকারীর কাছে সাম্প্রতিকতম অবস্থা প্রদর্শন করবে। TasksScreen composable function এটি যুক্ত করুন:

screens/tasks/TasksScreen.kt

val tasks = viewModel
    .tasks
    .collectAsStateWithLifecycle(emptyList())

একবার কম্পোজযোগ্য ফাংশনটি এই রাজ্যগুলিতে অ্যাক্সেস পেয়ে গেলে, আপনি LazyColumn আপডেট করতে পারেন (যা আপনি পর্দায় একটি তালিকা প্রদর্শন করতে ব্যবহার করেন এমন কাঠামো) দেখতে এইরকম দেখতে পারেন:

screens/tasks/TasksScreen.kt

LazyColumn {
    items(tasks.value, key = { it.id }) { taskItem ->
        TaskItem( [...] )
    }
}

পরীক্ষা করার সময়!

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

5. কর্মক্ষমতা পর্যবেক্ষণ

আপনি কোন বৈশিষ্ট্য যোগ করতে যাচ্ছেন?

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

কোড করার সময়!

আপনি Performance.kt ফাইলটি খুললে, আপনি ট্রেস নামে একটি ইনলাইন ফাংশন দেখতে পাবেন। এই ফাংশনটি একটি কাস্টম ট্রেস তৈরি করতে পারফরম্যান্স মনিটরিং এপিআইকে কল করে, একটি প্যারামিটার হিসাবে ট্রেস নাম বরাবর পাস করে। আপনি যে অন্য প্যারামিটারটি দেখতে পাচ্ছেন সেটি হল কোডের ব্লক যা আপনি নিরীক্ষণ করতে চান। প্রতিটি ট্রেসের জন্য সংগৃহীত ডিফল্ট মেট্রিক হল সম্পূর্ণরূপে চালানোর জন্য যে সময় লাগে:

model/service/Performance.kt

inline fun <T> trace(name: String, block: Trace.() -> T): T = Trace.create(name).trace(block)

আপনি কোডবেসের কোন অংশগুলিকে পরিমাপ করতে এবং কাস্টম ট্রেস যোগ করার জন্য গুরুত্বপূর্ণ মনে করেন তা চয়ন করতে পারেন৷ linkAccount ফাংশনে একটি কাস্টম ট্রেস যোগ করার একটি উদাহরণ যা আপনি এই কোডল্যাবে আগে দেখেছেন ( AccountServiceImpl.kt এ):

model/service/impl/AccountServiceImpl.kt

override suspend fun linkAccount(email: String, password: String): Unit =
  trace(LINK_ACCOUNT_TRACE) {
      val credential = EmailAuthProvider.getCredential(email, password)
      auth.currentUser!!.linkWithCredential(credential).await()
  }

এখন আপনার পালা! মেক ইট সো অ্যাপে কিছু কাস্টম ট্রেস যোগ করুন এবং এটি প্রত্যাশা অনুযায়ী কাজ করেছে কিনা তা পরীক্ষা করতে পরবর্তী বিভাগে যান।

পরীক্ষা করার সময়!

আপনি কাস্টম ট্রেস যোগ করা শেষ করার পরে, অ্যাপটি চালান এবং আপনি কয়েকবার পরিমাপ করতে চান এমন বৈশিষ্ট্যগুলি ব্যবহার করতে ভুলবেন না। তারপর Firebase কনসোলে যান এবং পারফরম্যান্স ড্যাশবোর্ডে যান। স্ক্রিনের নীচে, আপনি তিনটি ট্যাব পাবেন: নেটওয়ার্ক অনুরোধ , কাস্টম ট্রেস এবং স্ক্রিন রেন্ডারিং

কাস্টম ট্রেস ট্যাবে যান এবং চেক করুন যে কোডবেসে আপনার যোগ করা ট্রেসগুলি সেখানে প্রদর্শিত হচ্ছে এবং আপনি দেখতে পাচ্ছেন যে এই কোডের টুকরোগুলি কার্যকর করতে সাধারণত কতটা সময় লাগে৷

6. রিমোট কনফিগারেশন

আপনি কোন বৈশিষ্ট্য যোগ করতে যাচ্ছেন?

দূরবর্তী কনফিগারেশনের জন্য অনেকগুলি ব্যবহারের ক্ষেত্রে রয়েছে, দূরবর্তীভাবে আপনার অ্যাপের চেহারা পরিবর্তন করা থেকে শুরু করে বিভিন্ন ব্যবহারকারী বিভাগের জন্য বিভিন্ন আচরণ কনফিগার করা পর্যন্ত। এই কোডল্যাবে, আপনি একটি বৈশিষ্ট্য টগল তৈরি করতে রিমোট কনফিগ ব্যবহার করতে যাচ্ছেন যা মেক ইট সো অ্যাপে নতুন সম্পাদনা কার্য বৈশিষ্ট্যটি দেখাবে বা আড়াল করবে।

কোড করার সময়!

আপনাকে প্রথমে যা করতে হবে তা হল Firebase কনসোলে কনফিগারেশন তৈরি করা। এটি করার জন্য, আপনাকে রিমোট কনফিগ ড্যাশবোর্ডে নেভিগেট করতে হবে এবং প্যারামিটার যোগ করুন বোতামে ক্লিক করতে হবে। নীচের চিত্র অনুযায়ী ক্ষেত্রগুলি পূরণ করুন:

দূরবর্তী কনফিগ একটি প্যারামিটার ডায়ালগ তৈরি করুন

সমস্ত ক্ষেত্র পূরণ হয়ে গেলে, আপনি সংরক্ষণ বোতামে ক্লিক করতে পারেন এবং তারপরে প্রকাশ করতে পারেন । এখন যেহেতু প্যারামিটার তৈরি হয়েছে এবং আপনার কোডবেসে উপলব্ধ, আপনাকে কোডটি যোগ করতে হবে যা আপনার অ্যাপে নতুন মান আনবে। ConfigurationServiceImpl.kt ফাইলটি খুলুন এবং এই দুটি ফাংশনের বাস্তবায়ন আপডেট করুন:

model/service/impl/ConfigurationServiceImpl.kt

override suspend fun fetchConfiguration(): Boolean {
  return remoteConfig.fetchAndActivate().await()
}

override val isShowTaskEditButtonConfig: Boolean
  get() = remoteConfig[SHOW_TASK_EDIT_BUTTON_KEY].asBoolean()

প্রথম ফাংশনটি সার্ভার থেকে মানগুলি নিয়ে আসে এবং SplashViewModel.kt এ অ্যাপটি শুরু হওয়ার সাথে সাথে এটিকে কল করা হচ্ছে। এটি নিশ্চিত করার সর্বোত্তম উপায় যে সবচেয়ে আপ-টু-ডেট মানগুলি শুরু থেকেই সমস্ত স্ক্রিনে উপলব্ধ থাকবে৷ ব্যবহারকারী যখন কিছু করার মাঝখানে থাকে তখন আপনি UI বা অ্যাপের আচরণ পরে পরিবর্তন করলে এটি একটি ভাল ব্যবহারকারীর অভিজ্ঞতা নয়!

দ্বিতীয় ফাংশনটি বুলিয়ান মান ফিরিয়ে দিচ্ছে যা আপনি কনসোলে তৈরি করা প্যারামিটারের জন্য প্রকাশিত হয়েছিল। এবং আপনাকে loadTaskOptions ফাংশনে নিম্নলিখিত যোগ করে TasksViewModel.kt এ এই তথ্যটি পুনরুদ্ধার করতে হবে:

screens/tasks/TasksViewModel.kt

fun loadTaskOptions() {
  val hasEditOption = configurationService.isShowTaskEditButtonConfig
  options.value = TaskActionOption.getOptions(hasEditOption)
}

আপনি প্রথম লাইনে মানটি পুনরুদ্ধার করছেন এবং দ্বিতীয় লাইনে টাস্ক আইটেমগুলির জন্য মেনু বিকল্পগুলি লোড করতে এটি ব্যবহার করছেন। মান false হলে, এর মানে মেনুতে সম্পাদনা বিকল্প থাকবে না। এখন আপনার কাছে বিকল্পগুলির তালিকা রয়েছে, আপনাকে UI সঠিকভাবে প্রদর্শন করতে হবে। আপনি যখন জেটপ্যাক কম্পোজের সাথে একটি অ্যাপ তৈরি করছেন, আপনাকে composable function সন্ধান করতে হবে যা ঘোষণা করে যে TasksScreen UI কেমন হওয়া উচিত। তাই TasksScreen.kt ফাইলটি খুলুন এবং TasksViewModel.kt এ উপলব্ধ বিকল্পগুলি নির্দেশ করতে LazyColum আপডেট করুন:

screens/tasks/TasksScreen.kt

val options by viewModel.options

LazyColumn {
  items(tasks.value, key = { it.id }) { taskItem ->
    TaskItem(
      options = options,
      [...]
    )
  }
}

TaskItem হল আরেকটি composable function যা ঘোষণা করে যে একটি টাস্কের UI কেমন হওয়া উচিত। এবং প্রতিটি টাস্কের বিকল্পগুলির সাথে একটি মেনু থাকে যা ব্যবহারকারী যখন এটির শেষে তিনটি ডট আইকনে ক্লিক করে তখন প্রদর্শিত হয়।

পরীক্ষা করার সময়!

এখন আপনি অ্যাপটি চালানোর জন্য প্রস্তুত! আপনি Firebase কনসোল ব্যবহার করে যে মান প্রকাশ করেছেন তা অ্যাপটির আচরণের সাথে মেলে কিনা তা পরীক্ষা করুন:

  • যদি এটি false হয়, আপনি তিনটি বিন্দু আইকনে ক্লিক করার সময় শুধুমাত্র দুটি বিকল্প দেখতে পাবেন;
  • এটি true হলে, তিনটি বিন্দু আইকনে ক্লিক করার সময় আপনি তিনটি বিকল্প দেখতে পাবেন;

কনসোলে কয়েকবার মান পরিবর্তন করে অ্যাপটি পুনরায় চালু করার চেষ্টা করুন। রিমোট কনফিগারেশন ব্যবহার করে আপনার অ্যাপে নতুন বৈশিষ্ট্য চালু করা কতটা সহজ!

7. অভিনন্দন

অভিনন্দন, আপনি সফলভাবে Firebase এবং Jetpack Compose সহ একটি Android অ্যাপ তৈরি করেছেন!

আপনি UI-এর জন্য Jetpack Compose সহ সম্পূর্ণরূপে নির্মিত একটি Android অ্যাপে Firebase প্রমাণীকরণ, পারফরম্যান্স মনিটরিং, রিমোট কনফিগারেশন এবং ক্লাউড ফায়ারস্টোর যোগ করেছেন এবং আপনি এটিকে প্রস্তাবিত MVVM আর্কিটেকচারের সাথে মানানসই করেছেন!

আরও পড়া

রেফারেন্স ডক্স