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

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

প্লে বিলিং লাইব্রেরি সেটআপ

আপনার অ্যান্ড্রয়েড অ্যাপে Play Billing Library নির্ভরতা যোগ করুনবহিরাগত লিঙ্ক API ব্যবহার করতে আপনাকে 8.2 বা তার বেশি সংস্করণ ব্যবহার করতে হবে। যদি আপনার পূর্ববর্তী সংস্করণ থেকে মাইগ্রেট করার প্রয়োজন হয়, তাহলে বহিরাগত সামগ্রী লিঙ্ক যোগ করার আগে মাইগ্রেশন নির্দেশিকাতে থাকা নির্দেশাবলী অনুসরণ করুন।

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

বিলিং ক্লায়েন্ট চালু করতে, নিম্নলিখিত পরিবর্তনগুলি সহ "Initialize a BillingClient বিভাগে বর্ণিত একই পদক্ষেপগুলি অনুসরণ করুন:

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

নিম্নলিখিত উদাহরণে এই পরিবর্তনগুলি ব্যবহার করে একটি BillingClient শুরু করার পদ্ধতি দেখানো হয়েছে:

কোটলিন

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

জাভা

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

গুগল প্লেতে সংযোগ করুন

BillingClient আরম্ভ করার পরে, Connect to Google Play তে বর্ণিত পদ্ধতিতে Google Play তে সংযোগ করুন।

ব্যবহারকারীর যোগ্যতা পরীক্ষা করুন

গুগল প্লেতে সংযোগ করার পর, আপনাকে isBillingProgramAvailableAsync() পদ্ধতিতে কল করে ব্যবহারকারী বাহ্যিক কন্টেন্ট লিঙ্ক প্রোগ্রামের জন্য যোগ্য কিনা তা পরীক্ষা করতে হবে। ব্যবহারকারী বাহ্যিক কন্টেন্ট লিঙ্ক প্রোগ্রামের জন্য যোগ্য হলে এই পদ্ধতিটি BillingResponseCode.OK প্রদান করে। নিম্নলিখিত নমুনাটি দেখায় যে কীভাবে ব্যবহারকারী বাহ্যিক কন্টেন্ট লিঙ্কের জন্য যোগ্যতা পরীক্ষা করবেন:

কোটলিন

billingClient.isBillingProgramAvailableAsync(
  BillingProgram.EXTERNAL_CONTENT_LINK,
  object : BillingProgramAvailabilityListener {
    override fun onBillingProgramAvailabilityResponse(
      billingProgram: Int, billingResult: BillingResult) {
        if (billingResult.responseCode !=  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.
      }
    })

জাভা

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

    });

আপনার অ্যাপটি অন্যান্য রেসপন্স কোডগুলিতে কীভাবে সাড়া দেবে তার বিস্তারিত জানার জন্য রেসপন্স হ্যান্ডলিং বিভাগটি দেখুন। আপনি যদি কোটলিন এক্সটেনশন ব্যবহার করেন , তাহলে আপনি কোটলিন কর্উটিন ব্যবহার করতে পারেন যাতে আপনাকে আলাদা শ্রোতা নির্ধারণ করতে না হয়।

একটি বহিরাগত লেনদেন টোকেন প্রস্তুত করুন

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

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

কোটলিন

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

billingClient.createBillingProgramReportingDetailsAsync(
  params,
  object : BillingProgramReportingDetailsListener {
    override fun onCreateBillingProgramReportingDetailsResponse(
      billingResult: BillingResult,
      billingProgramReportingDetails: BillingProgramReportingDetails?) {
        if (billingResult.responseCode !=  BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return
        }
        val externalTransactionToken =
            billingProgramReportingDetails?.externalTransactionToken
        // Persist the external transaction token locally. Pass it to the
        // external website when launchExternalLink is called.
    }
  })

জাভা

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

যদি আপনি কোটলিন এক্সটেনশন ব্যবহার করেন , তাহলে আপনি কোটলিন কোরোটিন ব্যবহার করতে পারেন যাতে আপনাকে আলাদা শ্রোতা নির্ধারণ করতে না হয়।

বাহ্যিক লিঙ্কটি চালু করুন

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

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

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

কোটলিন

val 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()

val listener : LaunchExternalLinkResponseListener =
    object : LaunchExternalLinkResponseListener {
      override fun onLaunchExternalLinkResponse(
        billingResult: BillingResult) {
        if (billingResult.responseCode !=  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)

জাভা

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

বাহ্যিক কন্টেন্ট লিঙ্ক পরীক্ষা করুন

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

পরবর্তী পদক্ষেপ

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