নতুন বিল্ড সম্পর্কে পরীক্ষকদের বিজ্ঞপ্তি পাঠানো


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

শুরু করার আগে

আপনি আগে থেকে না করে থাকলে, আপনার Android প্রোজেক্টে Firebase যোগ করুন।

ধাপ ১: App Distribution Tester API চালু করুন

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

  2. Firebase App Testers API-এর অধীনে, চালু করুন বিকল্পে ক্লিক করুন।

ধাপ ২: আপনার অ্যাপে App Distribution যোগ করুন

ধাপ ২: আপনার অ্যাপে App Distribution যোগ করুন

App Distribution Android SDK-তে দুটি লাইব্রেরি আছে:

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

API-অনলি লাইব্রেরি আপনার কোডকে SDK-তে কল করার অনুমতি দেয়। সম্পূর্ণ SDK প্রয়োগ করা না থাকলে, কলগুলি কোনও প্রভাব ফেলবে না।

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

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")
}

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

ধাপ ৩: অ্যাপ-মধ্যস্থ অ্যালার্ট কনফিগার করা

App Distribution Android SDK আপনার পরীক্ষকদের জন্য ইন-অ্যাপ বিল্ড অ্যালার্ট সেট-আপ করার নিম্নলিখিত পদ্ধতি প্রদান করে:

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

আপনি App Distribution Android SDK প্রথমবার ব্যবহার করলে, আমরা প্রাথমিক কনফিগারেশন ব্যবহার করার সাজেশন দিই।

প্রাথমিক কনফিগারেশন

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

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

  2. টেস্টারের ইনস্টল করার জন্য নতুন উপলভ্য বিল্ড চেক করে।

  3. টেস্টারকে আপডেট করার জন্য প্রম্পট করে এমন একটি আগে থেকে তৈরি করা সতর্কতা দেখায়।

  4. নতুন বিল্ডটি Android অ্যাপ বান্ডেল (AAB) হলে, আপডেট প্রসেস সম্পূর্ণ করতে পরীক্ষার্থীকে Google Play-এ রিডাইরেক্ট করা হয়।

    নতুন বিল্ডটি Android অ্যাপ্লিকেশন প্যাকেজ (APK) হলে, SDK ব্যাকগ্রাউন্ডে নতুন বিল্ড ডাউনলোড করে এবং ডাউনলোড সম্পূর্ণ হলে টেস্টারকে ইনস্টল করার জন্য প্রম্পট করে। SDK, NotificationManager ব্যবহার করে ব্যবহারকারীকে ডাউনলোড প্রগ্রেস বিজ্ঞপ্তি পাঠায়। এছাড়াও, আপনি updateIfNewReleaseAvailable Task-এ 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;
        }
      }
    });

উন্নত কনফিগারেশন

উন্নত সাইন-ইন কনফিগারেশন

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.
});

আপডেট কনফিগারেশনের উন্নত বিকল্প

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.
    });

ধাপ ৪: আপনার প্রয়োগ করা কোড তৈরি ও পরীক্ষা করুন

Firebase কনসোল ব্যবহার করে বিল্ড ডিস্ট্রিবিউট করার মাধ্যমে আপনার অ্যাপ তৈরি করুন এবং আপনার প্রয়োগ করা ফিচার টেস্ট করুন।

এই ধরনের সাধারণ সমস্যা সমাধানের ব্যাপারে সহায়তা পেতে App Distribution সমস্যার সমাধান সংক্রান্ত নির্দেশিকা দেখুন:

  • টেস্টার অ্যাপ-মধ্যস্থ অ্যালার্ট পাচ্ছেন না
  • টেস্টারকে একাধিকবার Google-এ সাইন-ইন করতে বলা হচ্ছে