নতুন বিল্ড সম্পর্কে পরীক্ষকদের অবহিত করুন


ঐচ্ছিক Firebase App Distribution iOS এবং Android SDK-গুলো আপনার অ্যাপের নতুন বিল্ড ইনস্টল করার জন্য উপলব্ধ হলে পরীক্ষকদের কাছে অ্যাপের মধ্যেই অ্যালার্ট প্রদর্শন করার সুযোগ দেয়। এই নির্দেশিকাটি ব্যাখ্যা করে যে, কীভাবে App Distribution iOS এবং Android SDK ব্যবহার করে আপনার পরীক্ষকদের জন্য নতুন বিল্ড অ্যালার্ট তৈরি এবং কাস্টমাইজ করতে হয়।

শুরু করার আগে

যদি আগে থেকে না করে থাকেন, তাহলে আপনার অ্যান্ড্রয়েড প্রজেক্টে ফায়ারবেস যোগ করুন

Step 1 : Enable the App Distribution Tester API

  1. Google Cloud কনসোলে আপনার প্রজেক্টটি নির্বাচন করুন।

  2. Under Firebase App Testers API, click Enable .

Step 2 : Add App Distribution to your app

App Distribution অ্যান্ড্রয়েড এসডিকে দুটি লাইব্রেরি নিয়ে গঠিত:

  • firebase-appdistribution-api - এটি শুধুমাত্র API-ভিত্তিক লাইব্রেরি, যা আপনি সকল বিল্ড ভ্যারিয়েন্টে অন্তর্ভুক্ত করতে পারেন।
  • firebase-appdistribution - সম্পূর্ণ SDK বাস্তবায়ন (ঐচ্ছিক)।

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

আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত <project>/<app-module>/build.gradle.kts অথবা <project>/<app-module>/build.gradle ) App Distribution অ্যান্ড্রয়েড এসডিকে-এর জন্য ডিপেন্ডেন্সি ঘোষণা করুন। আপনার Play বিল্ডগুলিতে সম্পূর্ণ এসডিকে ইমপ্লিমেন্টেশনের সেলফ-আপডেট কার্যকারিতা অন্তর্ভুক্ত করা এড়াতে, সমস্ত বিল্ড ভ্যারিয়েন্টে এপিআই-অনলি লাইব্রেরি ডিপেন্ডেন্সি যোগ করুন। শুধুমাত্র প্রি-রিলিজ টেস্টিং-এর জন্য উদ্দিষ্ট ভ্যারিয়েন্টগুলিতে সম্পূর্ণ এসডিকে ইমপ্লিমেন্টেশন যোগ করুন।

dependencies {
    // ADD the API-only library to all variants
    implementation("com.google.firebase:firebase-appdistribution-api:16.0.0-beta20")

    // ADD the full SDK implementation to the "beta" variant only (example)
    betaImplementation("com.google.firebase:firebase-appdistribution:16.0.0-beta20")
}

কোটলিনের জন্য নির্দিষ্ট কোনো লাইব্রেরি মডিউল খুঁজছেন? অক্টোবর ২০২৩ রিলিজ থেকে, কোটলিন এবং জাভা উভয় ডেভেলপাররাই প্রধান লাইব্রেরি মডিউলটির উপর নির্ভর করতে পারবেন (বিস্তারিত জানতে, এই উদ্যোগ সম্পর্কিত FAQ দেখুন)।

Step 3 : Configure in-app alerts

App Distribution অ্যান্ড্রয়েড এসডিকে আপনার পরীক্ষকদের জন্য ইন-অ্যাপ বিল্ড অ্যালার্ট সেট আপ করার নিম্নলিখিত উপায়গুলি প্রদান করে:

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

আপনি যদি প্রথমবারের মতো App Distribution অ্যান্ড্রয়েড এসডিকে ব্যবহার করেন, তাহলে আমরা বেসিক কনফিগারেশন ব্যবহার করার পরামর্শ দিই।

Basic configuration

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

  1. পরীক্ষক অ্যালার্ট চালু করেছেন কিনা তা যাচাই করে। যদি পরীক্ষক এখনও অ্যালার্ট চালু না করে থাকেন, তবে এই পদ্ধতিটি পরীক্ষককে তার গুগল অ্যাকাউন্ট দিয়ে App Distribution সাইন ইন করতে অনুরোধ করে।

  2. পরীক্ষকের ইনস্টল করার জন্য নতুন উপলব্ধ বিল্ডগুলি পরীক্ষা করা হয়।

  3. পরীক্ষককে আপডেট করার জন্য অনুরোধ জানিয়ে একটি পূর্ব-নির্মিত সতর্কবার্তা প্রদর্শন করে।

  4. নতুন বিল্ডটি যদি একটি অ্যান্ড্রয়েড অ্যাপ বান্ডেল (AAB) হয়, তাহলে আপডেট প্রক্রিয়াটি সম্পন্ন করার জন্য পরীক্ষককে Google Play তে পাঠিয়ে দেওয়া হয়।

    নতুন বিল্ডটি যদি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্যাকেজ (APK) হয়, তাহলে SDK ব্যাকগ্রাউন্ডে নতুন বিল্ডটি ডাউনলোড করে এবং ডাউনলোড সম্পূর্ণ হলে পরীক্ষককে ইনস্টল করার জন্য অনুরোধ জানায়। SDK, NotificationManager ব্যবহার করে ব্যবহারকারীকে ডাউনলোডের অগ্রগতির নোটিফিকেশন পাঠায়। আপনি updateIfNewReleaseAvailable টাস্কের সাথে একটি onProgressUpdate হ্যান্ডলার সংযুক্ত করে আপনার নিজস্ব অগ্রগতি সূচকও যোগ করতে পারেন।

আপনি আপনার অ্যাপের যেকোনো পর্যায়ে updateIfNewReleaseAvailable কল করতে পারেন। উদাহরণস্বরূপ, আপনি অ্যাপের প্রধান অ্যাক্টিভিটির onResume মেথডের সময় updateIfNewReleaseAvailable কল করতে পারেন।

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

Kotlin

// Copy and paste this into any part of your app - for example, in your main
// activity's onResume method.
val firebaseAppDistribution = FirebaseAppDistribution.getInstance()
firebaseAppDistribution.updateIfNewReleaseAvailable()
    .addOnProgressListener { updateProgress ->
      // (Optional) Implement custom progress updates in addition to
      // automatic NotificationManager updates.
    }
    .addOnFailureListener { e ->
      // (Optional) Handle errors.
      if (e is FirebaseAppDistributionException) {
        when (e.errorCode) {
          Status.NOT_IMPLEMENTED -> {
            // SDK did nothing. This is expected when building for Play.
          }
          else -> {
            // Handle other errors.
          }
        }
      }
    }

Java

// Copy and paste this into any part of your app - for example, in your main
// activity's onResume method.
FirebaseAppDistribution firebaseAppDistribution = FirebaseAppDistribution.getInstance();
firebaseAppDistribution.updateIfNewReleaseAvailable()
    .addOnProgressListener(updateProgress -> {
      // (Optional) Implement custom progress updates in addition to
      // automatic NotificationManager updates.
    })
    .addOnFailureListener(e -> {
      // (Optional) Handle errors.
      if (e instanceof FirebaseAppDistributionException) {
        switch (((FirebaseAppDistributionException)e).getErrorCode()) {
          case NOT_IMPLEMENTED:
            // SDK did nothing. This is expected when building for Play.
            break;
          default:
            // Handle other errors.
            break;
        }
      }
    });

Advanced configuration

Advanced sign-in configuration

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

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

Kotlin

// Only show sign-in UI if this is the "beta" variant (example).
if (BuildConfig.BUILD_TYPE == "beta" && !firebaseAppDistribution.isTesterSignedIn) {
    // Start your sign-in UI here.
}

// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn) {
    firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener {
        // Handle failed update.
    }
}

Java

// Only show sign-in UI if this is the "beta" variant (example).
if (BuildConfig.BUILD_TYPE == "beta" && !firebaseAppDistribution.isTesterSignedIn()) {
    // Start your sign-in UI here.
}

// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn()) {
    firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener( e -> {
        // Handle failed update.
    });
}

আপনার সাইন-ইন UI থেকে, যখন পরীক্ষক এগিয়ে যেতে চান, তখন signInTester() কল করুন:

Kotlin

firebaseAppDistribution.signInTester().addOnSuccessListener {
  // Handle successful sign-in.
}.addOnFailureListener {
  // Handle failed sign-in.
});

Java

firebaseAppDistribution.signInTester().addOnSuccessListener( unused -> {
  // Handle successful sign-in.
}).addOnFailureListener(e -> {
  // Handle failed sign-in.
});

Advanced update configuration

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

মনে রাখবেন যে updateApp ডাউনলোডের অগ্রগতি দেখানোর কোনো ব্যবস্থা রাখে না। এর মানে হলো, আপনাকে NotificationManager , অ্যাপের ভেতরে কোনো স্ট্যাটাস ডিসপ্লে, বা অন্য কোনো পদ্ধতি ব্যবহার করে নিজের অগ্রগতি দেখানোর ব্যবস্থা করতে হবে।

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

Kotlin

firebaseAppDistribution.checkForNewRelease().addOnSuccessListener { release ->
    if (release != null) {
        // New release available. Start your update UI here.
    }
}.addOnFailureListener {
    // Handle failed check for new release. Fails with Status#NOT_IMPLEMENTED
    // if built for Play.
}

Java

firebaseAppDistribution.checkForNewRelease().addOnSuccessListener(release -> {
    if (release != null) {
        // New release available. Start your update UI here.
    }
}).addOnFailureListener(e -> {
    // Handle failed check for new release. Fails with Status#NOT_IMPLEMENTED
    // if built for Play.
});

যখন পরীক্ষক আপনার আপডেট UI থেকে আপডেটটি চালিয়ে যাওয়ার সিদ্ধান্ত নেন, তখন updateApp() কল করুন:

Kotlin

firebaseAppDistribution.updateApp()
    .addOnProgressListener { updateState ->
      // Use updateState to show update progress.
    }

Java

firebaseAppDistribution.updateApp()
    .addOnProgressListener(updateState -> {
      // Use updateState to show update progress.
    });

Step 4 : Build and test your implementation

Firebase কনসোল ব্যবহার করে পরীক্ষকদের কাছে বিল্ডটি বিতরণ করে আপনার অ্যাপটি তৈরি করুন এবং এর বাস্তবায়ন পরীক্ষা করুন।

সাধারণ সমস্যা, যেমন—এর সমাধানে সাহায্যের জন্য App Distribution ট্রাবলশুটিং গাইডটি দেখুন:

  • Tester not receiving in-app alerts
  • পরীক্ষককে একাধিকবার গুগলে সাইন ইন করতে বলা হচ্ছে।