এক্সটার্নাল কন্টেন্ট লিঙ্কের জন্য অ্যাপ-মধ্যস্থ ইন্টিগ্রেশন সংক্রান্ত নির্দেশিকা

উপযুক্ত অ্যাপে এক্সটার্নাল কন্টেন্ট লিঙ্ক অফার করার জন্য Play Billing Library API কীভাবে ইন্টিগ্রেট করতে হয় তা এই ডকুমেন্টে বর্ণনা করা হয়েছে। এর মধ্যে মার্কিন যুক্তরাষ্ট্রে আপনার Play অ্যাপের বাইরে থাকা ব্যবহারকারীদের লিঙ্ক করার ক্ষমতা অন্তর্ভুক্ত যাতে অ্যাপ-মধ্যস্থ ডিজিটাল কন্টেন্ট ও অ্যাপ ডাউনলোডের অফার ব্যবহারকারীদের দেওয়া যায়। এই প্রোগ্রাম সম্পর্কে আরও জানতে, প্রোগ্রামের প্রয়োজনীয়তা দেখুন।

Play Billing Library সেট-আপ

আপনার Android অ্যাপে Play Billing Library ডিপেন্ডেন্সি যোগ করুন। এক্সটার্নাল লিঙ্ক API ব্যবহার করতে, আপনাকে 8.2.1 বা তার পরের যেকোনও ভার্সন ব্যবহার করতে হবে। আপনাকে আগের কোনও ভার্সন থেকে মাইগ্রেট করতে হলে, এক্সটার্নাল কন্টেন্ট লিঙ্ক যোগ করার আগে মাইগ্রেশন নির্দেশিকা অনুসরণ করুন।

বিলিং ক্লায়েন্ট ইনিশিয়ালাইজ করা

বিলিং ক্লায়েন্টকে ইনিশিয়ালাইজ করতে, BillingClient ইনিশিয়ালাইজ করুন-এ বর্ণিত একই ধাপ অনুসরণ করুন, তবে নিম্নলিখিত পরিবর্তনগুলি করুন:

  • PurchasesUpdatedListener চালু করবেন না - এক্সটার্নাল কন্টেন্ট লিঙ্কের জন্য এই লিসনারের প্রয়োজন নেই।
  • আপনার অ্যাপ যে এক্সটার্নাল কন্টেন্ট লিঙ্ক ব্যবহার করে তা বোঝাতে enableBillingProgram()-এর সাথে BillingProgram.EXTERNAL_CONTENT_LINK কল করুন।

নিম্নলিখিত উদাহরণ থেকে এইসব পরিবর্তন সহ BillingClient কীভাবে শুরু করতে হয় তা জানুন:

Kotlin

জাভা

private BillingClient billingClient = BillingClient.newBuilder(context)
    .enableBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
    .build();

Google Play-তে কানেক্ট করা

BillingClient চালু করার পরে, Google Play-তে কানেক্ট করুন নিবন্ধে বর্ণিত পদ্ধতি অনুসরণ করে Google Play-তে কানেক্ট করুন।

ব্যবহারকারী উপযুক্ত কিনা চেক করা

Google Play-তে কানেক্ট করার পরে, ব্যবহারকারী এক্সটার্নাল কন্টেন্ট লিঙ্ক প্রোগ্রামের জন্য উপযুক্ত কিনা তা আপনাকে isBillingProgramAvailableAsync() মেথড কল করে চেক করতে হবে। ব্যবহারকারী এক্সটার্নাল কন্টেন্ট লিঙ্ক প্রোগ্রামের জন্য উপযুক্ত হলে, এই পদ্ধতি BillingResponseCode.OK রিটার্ন করে। নিচের নমুনা থেকে বোঝা যাবে কীভাবে এক্সটার্নাল কন্টেন্ট লিঙ্কের জন্য ব্যবহারকারীর উপযুক্ততা চেক করতে হয়:

Kotlin

জাভা

billingClient.isBillingProgramAvailableAsync(
  BillingProgram.EXTERNAL_CONTENT_LINK,
  new BillingProgramAvailabilityListener() {
    @Override
    public void onBillingProgramAvailabilityResponse(
      int billingProgram, BillingResult billingResult) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors,
            // handling external content links unavailable, etc.
            return;
        }

        // External content links are available. Prepare an external
        // transaction token.
      }

    });

আপনার অ্যাপ কীভাবে অন্যান্য রেসপন্স কোডের উত্তর দেবে সেই সম্পর্কে বিস্তারিত জানতে, উত্তর ম্যানেজ করা বিভাগটি দেখুন। আপনি Kotlin এক্সটেনশন ব্যবহার করলে, আপনাকে আলাদা লিসনার ডিফাইন করতে হবে না, আপনি Kotlin কোরাউটিন ব্যবহার করতে পারবেন।

এক্সটার্নাল ট্রানজ্যাকশন টোকেন প্রস্তুত করা

এর পরে, আপনাকে Play Billing লাইব্রেরি থেকে এক্সটার্নাল ট্রানজ্যাকশন টোকেন জেনারেট করতে হবে। ব্যবহারকারী এক্সটার্নাল লিঙ্ক API-এর মাধ্যমে কোনও এক্সটার্নাল ওয়েবসাইটে গেলে প্রতিবার একটি নতুন এক্সটার্নাল ট্রানজ্যাকশন টোকেন তৈরি করতে হবে। createBillingProgramReportingDetailsAsync API কল করে এটি করা যেতে পারে। ব্যবহারকারীকে লিঙ্ক-আউট করার ঠিক আগে টোকেন জেনারেট করতে হবে।

মনে রাখবেন: এক্সটার্নাল ট্রানজ্যাকশন টোকেন কখনওই ক্যাশে করা উচিত নয় এবং ব্যবহারকারী লিঙ্ক থেকে বেরিয়ে গেলে প্রতিবার আপনাকে নতুন টোকেন তৈরি করতে হবে।

Kotlin

জাভা

BillingProgramReportingDetailsParams params =
    BillingProgramReportingDetailsParams.newBuilder()
        .setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
        .build();

billingClient.createBillingProgramReportingDetailsAsync(
  params,
  new BillingProgramReportingDetailsListener() {
    @Override
    public void onCreateBillingProgramReportingDetailsResponse(
      BillingResult billingResult,
      @Nullable BillingProgramReportingDetails
        billingProgramReportingDetails) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return;
        }

        String transactionToken =
          billingProgramReportingDetails.getExternalTransactionToken();

        // Persist the external transaction token locally. Pass it to the
        // external website when launchExternalLink is called.
      }
  });

আপনি Kotlin এক্সটেনশন ব্যবহার করলে, আপনাকে আলাদা লিসনার ডিফাইন করতে হবে না, আপনি Kotlin কোরাউটিন ব্যবহার করতে পারবেন।

এক্সটার্নাল লিঙ্ক লঞ্চ করা

এক্সটার্নাল ট্রানজ্যাকশন টোকেন রেডি হয়ে গেলে, ব্যবহারকারীকে অ্যাপের বাইরে ডিজিটাল কন্টেন্ট অফার বা অ্যাপ ডাউনলোডের সাথে লিঙ্ক করা হতে পারে। এটি launchExternalLink মেথড কল করে করা হয়। আপনি এই API কল করলে, ব্যবহারকারীর সেটিংসের উপর নির্ভর করে Google Play ব্যবহারকারীকে অতিরিক্ত তথ্যের ডায়ালগ দেখাতে পারে।

launchExternalLink মেথড কল করার সময়, LaunchExternalLinkParams-এর মাধ্যমে এক্সটার্নাল লিঙ্কের বিবরণ অবশ্যই দিতে হবে। এই ক্লাসে নিম্নলিখিত প্যারামিটার থাকে:

  • লিঙ্ক URI - ডিজিটাল কন্টেন্ট বা অ্যাপ ডাউনলোড অফার করা হয় এমন এক্সটার্নাল ওয়েবসাইটের লিঙ্ক। অ্যাপ ডাউনলোডের জন্য, এই লিঙ্কটি Play Developer Console-এ রেজিস্টার ও অনুমোদিত হতে হবে।
  • লিঙ্কের ধরন - ব্যবহারকারীকে অফার করা কন্টেন্টের ধরন।
  • লঞ্চ মোড - লিঙ্কটি কীভাবে লঞ্চ করা হবে তা নির্দিষ্ট করে। অ্যাপ ডাউনলোডের জন্য, আপনাকে এটি LAUNCH_IN_EXTERNAL_BROWSER_OR_APP হিসেবে সেট করতে হবে।
  • বিলিং প্রোগ্রাম - এটি BillingProgram.EXTERNAL_CONTENT_LINK হিসেবে সেট করুন।

Kotlin

জাভা

LaunchExternalLinkParams params =
  LaunchExternalLinkParams.newBuilder()
    .setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
    .setLinkUri(Uri.parse("https://www.myapprovedsite.com"))
    .setLinkType(LaunchExternalLinkParams.LinkType.LINK_TO_APP_DOWNLOAD)
    .setLaunchMode(
      LaunchExternalLinkParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
    .build()

LaunchExternalLinkResponseListener listener =
  new LaunchExternalLinkResponseListener() {
    @Override
    public void onLaunchExternalLinkResponse(BillingResult billingResult) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return;
        }

        // If Launch Mode was set to LAUNCH_IN_EXTERNAL_BROWSER_OR_APP, the
        // user was directed outside of the app by Play. This does not give
        // any information on the user's actions during the link out, such
        // as if a transaction was completed.

        // If Launch Mode was set to CALLER_WILL_LAUNCH_LINK, then your app
        // may proceed to direct the user to the external website.
    }
  }

billingClient.launchExternalLink(activity, params, listener);

উত্তরের ম্যানেজমেন্ট

সমস্যা হলে, isBillingProgramAvailableAsync(), এবং createBillingProgramReportingDetailsAsync(), এবং onLaunchExternalLinkResponse() পদ্ধতি BillingResponseCode.OK-এর BillingResponseCode থেকে আলাদা কিছু প্রদান করতে পারে। এইসব রেসপন্স কোডকে এইভাবে হ্যান্ডেল করার কথা বিবেচনা করুন:

  • ERROR: এটি ইন্টার্নাল সমস্যা। ট্রানজ্যাকশন সম্পূর্ণ করবেন না বা এক্সটার্নাল ওয়েবসাইট খুলবেন না। API আবার কল করে অথবা পরের বার যখন আপনি ব্যবহারকারীকে অ্যাপের বাইরে ডাইরেক্ট করার চেষ্টা করবেন তখন launchExternalLink() কল করে আবার চেষ্টা করুন।
  • FEATURE_NOT_SUPPORTED: বর্তমান ডিভাইসে Play Store-এ এক্সটার্নাল কন্টেন্ট লিঙ্ক API কাজ করে না। ট্রানজ্যাকশন সম্পূর্ণ করবেন না বা এক্সটার্নাল ওয়েবসাইট খুলবেন না।
  • USER_CANCELED: এক্সটার্নাল ওয়েবসাইট খোলার প্রসেসটি সম্পূর্ণ করবেন না। অ্যাপের বাইরে ব্যবহারকারীকে ডাইরেক্ট করার চেষ্টা করার সময় launchExternalLink() আবার কল করুন।
  • BILLING_UNAVAILABLE: ট্রানজ্যাকশনটি এক্সটার্নাল কন্টেন্ট লিঙ্কের জন্য উপযুক্ত নয় এবং তাই এই প্রোগ্রামের অধীনে প্রসেস করা যাবে না। এর কারণ হল, ব্যবহারকারী এই প্রোগ্রামের জন্য উপযুক্ত দেশে থাকেন না অথবা আপনার অ্যাকাউন্ট এই প্রোগ্রামে এনরোল করা যায়নি। সেটি যদি পরেরটি হয়, তাহলে Play Developer Console-এ আপনার এনরোলমেন্ট স্ট্যাটাস চেক করুন।
  • DEVELOPER_ERROR: অনুরোধে সমস্যা আছে। এগিয়ে যাওয়ার আগে সমস্যা শনাক্ত ও সমাধান করতে ডিবাগ মেসেজ ব্যবহার করুন।
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: এগুলি হল ক্ষণস্থায়ী সমস্যা যা উপযুক্ত আবার চেষ্টা করার নীতি দিয়ে ম্যানেজ করা উচিত। SERVICE_DISCONNECTED-এর ক্ষেত্রে, আবার চেষ্টা করার আগে Google Play-এর সাথে কানেকশন আবার স্থাপন করুন।

এক্সটার্নাল কন্টেন্ট লিঙ্ক পরীক্ষা করা

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

পরবর্তী ধাপ

ইন-অ্যাপ ইন্টিগ্রেশন সম্পূর্ণ করার পরে, আপনি ব্যাকএন্ড ইন্টিগ্রেট করার জন্য প্রস্তুত।