बाहरी कॉन्टेंट के लिंक के लिए, ऐप्लिकेशन में इंटिग्रेशन से जुड़े दिशा-निर्देश

इस दस्तावेज़ में, ज़रूरी शर्तें पूरी करने वाले ऐप्लिकेशन में बाहरी कॉन्टेंट के लिंक उपलब्ध कराने के लिए, Play Billing Library के एपीआई को इंटिग्रेट करने का तरीका बताया गया है. इसमें, अमेरिका में रहने वाले लोगों को Play Store से बाहर के ऐप्लिकेशन के लिंक उपलब्ध कराने की सुविधा शामिल है. इससे, लोगों को इन-ऐप्लिकेशन डिजिटल कॉन्टेंट और ऐप्लिकेशन डाउनलोड करने के ऑफ़र मिल सकते हैं. इस प्रोग्राम के बारे में ज़्यादा जानने के लिए, प्रोग्राम की ज़रूरी शर्तें देखें.

Play Billing Library सेट अप करना

अपने Android ऐप्लिकेशन में, Play Billing Library की डिपेंडेंसी जोड़ें. बाहरी लिंक के एपीआई का इस्तेमाल करने के लिए, आपको वर्शन 8.2.1 या इससे नया वर्शन इस्तेमाल करना होगा. अगर आपको पुराने वर्शन से माइग्रेट करना है, तो बाहरी कॉन्टेंट के लिंक जोड़ने से पहले, माइग्रेशन गाइड में दिए गए निर्देशों का पालन करें.

बिलिंग क्लाइंट शुरू करना

बिलिंग क्लाइंट शुरू करने के लिए, Initialize a BillingClient में बताए गए तरीके का पालन करें. हालांकि, इसमें ये बदलाव करें:

  • PurchasesUpdatedListener को चालू न करें. बाहरी कॉन्टेंट के लिंक के लिए, इस लिसनर की ज़रूरत नहीं होती .
  • यह बताने के लिए कि आपका ऐप्लिकेशन, बाहरी कॉन्टेंट के लिंक का इस्तेमाल करता है, BillingProgram.EXTERNAL_CONTENT_LINK के साथ enableBillingProgram() को कॉल करें.

यहां दिए गए उदाहरण में, इन बदलावों के साथ BillingClient को शुरू करने का तरीका दिखाया गया है:

Kotlin

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

Java

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

Java

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 Library से बाहरी लेन-देन का टोकन जनरेट करना होगा. जब भी उपयोगकर्ता, बाहरी लिंक के एपीआई के ज़रिए किसी बाहरी वेबसाइट पर जाता है, तो बाहरी लेन-देन का नया टोकन जनरेट करना ज़रूरी है. यह काम, createBillingProgramReportingDetailsAsync एपीआई को कॉल करके किया जा सकता है. उपयोगकर्ता को रीडायरेक्ट करने से ठीक पहले, टोकन जनरेट किया जाना चाहिए.

ध्यान दें: बाहरी लेन-देन के टोकन को कभी भी कैश नहीं किया जाना चाहिए. साथ ही, जब भी उपयोगकर्ता को रीडायरेक्ट किया जाता है, तब आपको नया टोकन जनरेट करना चाहिए.

Kotlin

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

Java

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 इस एपीआई को कॉल करने पर, Google Play, उपयोगकर्ता की सेटिंग के आधार पर, उन्हें अतिरिक्त जानकारी वाले डायलॉग दिखा सकता है.

launchExternalLink तरीके को कॉल करते समय, बाहरी लिंक की जानकारी LaunchExternalLinkParams के ज़रिए देनी होगी. इस क्लास में ये पैरामीटर शामिल होते हैं:

  • लिंक का यूआरआई - यह उस बाहरी वेबसाइट का लिंक है जहां डिजिटल कॉन्टेंट या ऐप्लिकेशन डाउनलोड करने का ऑफ़र दिया जाता है. ऐप्लिकेशन डाउनलोड करने के लिए, इस लिंक को Play Developer Console में रजिस्टर और मंज़ूरी मिलनी चाहिए.
  • लिंक का टाइप - यह उस कॉन्टेंट का टाइप है जो उपयोगकर्ता को ऑफ़र किया जा रहा है.
  • लॉन्च मोड - इससे पता चलता है कि लिंक को कैसे लॉन्च किया जाता है. ऐप्लिकेशन डाउनलोड करने के लिए, आपको इसे LAUNCH_IN_EXTERNAL_BROWSER_OR_APP पर सेट करना होगा.
  • बिलिंग प्रोग्राम - इसे BillingProgram.EXTERNAL_CONTENT_LINK पर सेट करें.

Kotlin

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)

Java

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 के अलावा कोई दूसरा BillingResponseCode.OK दिखा सकते हैं. इन रिस्पॉन्स कोड को इस तरह मैनेज करें:

  • ERROR: यह एक इंटरनल गड़बड़ी है. लेन-देन या बाहरी वेबसाइट को खोलने की प्रोसेस जारी न रखें. एपीआई को फिर से कॉल करके या अगली बार उपयोगकर्ता को ऐप्लिकेशन से बाहर रीडायरेक्ट करने की कोशिश करते समय, launchExternalLink() को कॉल करके फिर से कोशिश करें.
  • FEATURE_NOT_SUPPORTED: मौजूदा डिवाइस पर Play Store, बाहरी कॉन्टेंट के लिंक वाले एपीआई के साथ काम नहीं करता. लेन-देन या बाहरी वेबसाइट को खोलने की प्रोसेस जारी न रखें.
  • USER_CANCELED: बाहरी वेबसाइट को खोलने की प्रोसेस जारी न रखें. अगली बार उपयोगकर्ता को ऐप्लिकेशन से बाहर रीडायरेक्ट करने की कोशिश करते समय, launchExternalLink() को फिर से कॉल करें.
  • BILLING_UNAVAILABLE: यह लेन-देन, बाहरी कॉन्टेंट के लिंक के लिए ज़रूरी शर्तें पूरी नहीं करता. इसलिए, इस प्रोग्राम के तहत इसे जारी न रखें. ऐसा इसलिए है, क्योंकि उपयोगकर्ता उस देश में नहीं है जहां यह प्रोग्राम उपलब्ध है या आपके खाते को इस प्रोग्राम में रजिस्टर नहीं किया गया है. अगर दूसरी वजह है, तो Play Developer Console में अपने रजिस्ट्रेशन की स्थिति देखें.
  • DEVELOPER_ERROR: अनुरोध में कोई गड़बड़ी है. आगे बढ़ने से पहले, गड़बड़ी की पहचान करने और उसे ठीक करने के लिए, डीबग मैसेज का इस्तेमाल करें.
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: ये अस्थायी गड़बड़ियां हैं. इन्हें ठीक करने के लिए, फिर से कोशिश करने की सही नीति का इस्तेमाल करना चाहिए. SERVICE_DISCONNECTED की गड़बड़ी होने पर, फिर से कोशिश करने से पहले, Google Play से कनेक्शन फिर से बनाएं.

बाहरी कॉन्टेंट के लिंक की जांच करना

बाहरी ऑफ़र के इंटिग्रेशन की जांच करने के लिए, लाइसेंस टेस्टर का इस्तेमाल किया जाना चाहिए. लाइसेंस टेस्टर खातों से शुरू किए गए लेन-देन के लिए, आपको इनवॉइस नहीं भेजा जाएगा. लाइसेंस टेस्टर कॉन्फ़िगर करने के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन का लाइसेंस देने के साथ इन-ऐप्लिकेशन बिलिंग की जांच करना देखें.

अगले चरण

इन-ऐप्लिकेशन इंटिग्रेशन पूरा करने के बाद, बैकएंड को इंटिग्रेट किया जा सकता है .