বাহ্যিক অফার প্রোগ্রামের জন্য ইন-অ্যাপ ইন্টিগ্রেশন নির্দেশিকা

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

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

বাহ্যিক অফার APIs ব্যবহার করতে, আপনার Android অ্যাপে Play বিলিং লাইব্রেরি নির্ভরতার 6.2.1 বা উচ্চতর সংস্করণ যোগ করুন । আপনি যদি পূর্ববর্তী সংস্করণ থেকে স্থানান্তর করতে চান তবে বহিরাগত অফারগুলি বাস্তবায়ন করার চেষ্টা করার আগে মাইগ্রেশন গাইডের নির্দেশাবলী অনুসরণ করুন৷

Google Play এর সাথে সংযোগ করুন

ইন্টিগ্রেশন প্রক্রিয়ার প্রথম ধাপগুলি বিলিং ইন্টিগ্রেশন গাইডে বর্ণিত ধাপগুলির মতোই, আপনার BillingClient শুরু করার সময় কিছু পরিবর্তন সহ:

  • আপনি বহিরাগত অফার ব্যবহার করতে চান তা নির্দেশ করার জন্য আপনাকে একটি নতুন পদ্ধতিতে কল করতে হবে: enableExternalOffer

নিম্নলিখিত উদাহরণটি এই পরিবর্তনগুলির সাথে একটি BillingClient শুরু করার প্রদর্শন করে:

কোটলিন

var billingClient = BillingClient.newBuilder(context)
  .enableExternalOffer()
  .build()

জাভা

private BillingClient billingClient = BillingClient.newBuilder(context)
    .enableExternalOffer()
    .build();

আপনি BillingClient শুরু করার পরে, ইন্টিগ্রেশন গাইডে বর্ণিত হিসাবে আপনাকে Google Play-তে একটি সংযোগ স্থাপন করতে হবে।

গ্রহণযোগ্যতা যাচাই

isExternalOfferAvailableAsync এ কল করে আপনার অ্যাপটি নিশ্চিত করা উচিত যে বহিরাগত অফারগুলি উপলব্ধ।

এই API প্রদান করে BillingResponseCode.OK যদি বাহ্যিক অফার পাওয়া যায়। আপনার অ্যাপ্লিকেশানের অন্যান্য প্রতিক্রিয়া কোডগুলিতে কীভাবে প্রতিক্রিয়া জানানো উচিত তার বিশদ বিবরণের জন্য প্রতিক্রিয়া পরিচালনা দেখুন৷

কোটলিন


billingClient.isExternalOfferAvailableAsync(
  object : ExternalOfferAvailabilityListener {
    override fun onExternalOfferAvailabilityResponse(
      billingResult: BillingResult) {
        if (billingResult.responseCode !=  BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors,
            // handling external offers unavailable, etc.
            return
        }

        // External offers are available. Continue with steps in the
        // guide.
})

জাভা


billingClient.isExternalOfferAvailableAsync(
  new ExternalOfferAvailabilityListener() {
    @Override
    public void onExternalOfferAvailabilityResponse(
      BillingResult billingResult) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors,
            // handling external offers being unavailable, etc.
            return;
        }
        // External offers are available. Continue with steps in the
        // guide.
      }

});

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

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

কোটলিন


billingClient.createExternalOfferReportingDetailsAsync(
  object : ExternalOfferReportingDetailsListener {
    override fun onExternalOfferReportingDetailsResponse(
      billingResult: BillingResult,
      externalOfferReportingDetails: ExternalOfferReportingDetails?) {
        if (billingResult.responseCode !=  BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return
        }
        val externalTransactionToken =
            externalOfferReportingDetails?.externalTransactionToken
        // Persist the transaction token locally. Pass it to the external
        // website when showExternalOfferInformationDialog is called.
    }
})

জাভা


billingClient.createExternalOfferReportingDetailsAsync(
  new ExternalOfferReportingDetailsListener() {
    @Override
    public void onExternalOfferReportingDetailsResponse(
      BillingResult billingResult,
      @Nullable ExternalOfferReportingDetails
        externalOfferReportingDetails) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return;
        }

        String transactionToken =
          externalOfferReportingDetails.getExternalTransactionToken();

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

ব্যবহারকারীদের জন্য তথ্য ডায়ালগ

বাহ্যিক অফারগুলির সাথে সংহত করার জন্য, আপনার যোগ্য অ্যাপটিকে অবশ্যই একটি তথ্য স্ক্রীন দেখাতে হবে যা ব্যবহারকারীদের বুঝতে সাহায্য করে যে তারা অ্যাপের বাইরে একটি বাহ্যিক ওয়েবসাইটে নির্দেশিত হতে চলেছে। প্রতিবার একটি বাহ্যিক অফার লিঙ্ক করার আগে showExternalOfferInformationDialog API এ কল করে তথ্যের পর্দা অবশ্যই ব্যবহারকারীদের দেখাতে হবে।

কোটলিন


// An activity reference from which the external offers information dialog
// will be launched.
val activity : Activity = ...;

val listener : ExternalOfferInformationDialogListener =
  ExternalOfferInformationDialogListener {
      override fun onExternalOfferInformationDialogResponse(
        billingResult: BillingResult){
        // Check billingResult
    }
}

val billingResult = billingClient.showExternalOfferInformationDialog(
  activity, listener)

জাভা


// An activity reference from which the external offers information dialog
// will be launched.
Activity activity = ...;

ExternalOfferInformationDialogListener listener =
  new ExternalOfferInformationDialogListener() {
    @Override
    public void onExternalOfferInformationDialogResponse(
      BillingResult billingResult) {
        if (billingResult.responseCode !=  BillingResponseCode.OK) {
          // Handle failures such as retrying due to network errors.
        }
        // Open the external website, passing along the external transaction
        // token as a URL parameter. If the user purchases an item, be sure
        // to report the transaction to Google Play.
      }
}

BillingResult billingResult =
  billingClient.showExternalOfferInformationDialog(activity, listener);

যদি এই পদ্ধতিটি BillingResponseCode.OK ফেরত দেয়, তাহলে আপনার অ্যাপ ব্যবহারকারীকে বহিরাগত ওয়েবসাইটে নিয়ে যেতে পারে। যদি পদ্ধতিটি BillingResponseCode.USER_CANCELED প্রদান করে, তাহলে আপনার অ্যাপটি অবশ্যই ওয়েবসাইট খোলা চালিয়ে যাবে না।

Google Play-তে লেনদেনের প্রতিবেদন করুন

আপনার ব্যাকএন্ড থেকে Google Play Developer API-কে কল করে সমস্ত বাহ্যিক লেনদেন Google Play-এ রিপোর্ট করতে হবে৷ createExternalOfferReportingDetailsAsync API ব্যবহার করে প্রাপ্ত একটি externalTransactionToken প্রদান করার সময় বাহ্যিক লেনদেনের রিপোর্ট করতে হবে। যদি একজন ব্যবহারকারী একাধিক ক্রয় করেন, আপনি প্রতিটি ক্রয়ের রিপোর্ট করতে একই externalTransactionToken ব্যবহার করতে পারেন। কিভাবে একটি লেনদেনের রিপোর্ট করতে হয় তা জানতে, ব্যাকএন্ড ইন্টিগ্রেশন গাইড দেখুন।

প্রতিক্রিয়া হ্যান্ডলিং

যখন একটি ত্রুটি ঘটে, পদ্ধতিগুলি isExternalOfferAvailableAsync , createExternalOfferReportingDetailsAsync , এবং showExternalOfferInformationDialog BillingResponseCode.OK ব্যতীত অন্য প্রতিক্রিয়াগুলি ফিরিয়ে দিতে পারে। নিম্নরূপ এই প্রতিক্রিয়া কোডগুলি পরিচালনা করার কথা বিবেচনা করুন:

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

বাহ্যিক অফার পরীক্ষা করুন

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

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

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