डिजिटल प्रॉडक्ट एपीआई और पेमेंट रिक्वेस्ट एपीआई का इस्तेमाल करके, Google Play Billing से पेमेंट पाना

आंद्रे सिप्रियानी बांडारा
आंद्रे सिप्रियानी बांद्रा

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

भरोसेमंद वेब गतिविधियों का इस्तेमाल करके बनाए गए और Google Play Store के ज़रिए डिलीवर किए जाने वाले ऐप्लिकेशन के लिए, अब आप Google Play Billing के साथ इंटिग्रेट करने के लिए, Payment अनुरोध API और डिजिटल गुड्स एपीआई का इस्तेमाल कर सकते हैं. यह Android और ChromeOS के लिए, Chrome 101 और उसके बाद के वर्शन पर उपलब्ध है.

इस गाइड में, आपको अपने PWA में Google Play Billing की सहायता जोड़ने और उसे ChromeOS और Play Store, दोनों के लिए Google Play Store पर उपलब्ध कराने के तरीके की जानकारी मिलेगी.

आपको अपने PWA में Play Billing की सेवा जोड़ने के लिए, दो वेब प्लैटफ़ॉर्म एपीआई का इस्तेमाल करना होगा. डिजिटल प्रॉडक्ट एपीआई का इस्तेमाल, SKU की जानकारी इकट्ठा करने और Play Store से की गई खरीदारी और एनटाइटलमेंट की जांच करने के लिए किया जाता है. पेमेंट अनुरोध एपीआई का इस्तेमाल, Google Play Store को पैसे चुकाने के तरीके के तौर पर कॉन्फ़िगर करने और परचेज़ फ़्लो को पूरा करने के लिए किया जाता है.

Play Store पर ऐप्लिकेशन से कमाई करने का तरीका

Play Store पर Google Play Billing की मदद से, आपके ऐप्लिकेशन से दो तरीकों से कमाई की जा सकती है:

  • इन-ऐप्लिकेशन खरीदारी की मदद से, लंबे समय तक इस्तेमाल की जा सकने वाली और इस्तेमाल होने वाली वर्चुअल चीज़ें बेची जा सकती हैं. जैसे, अतिरिक्त सुविधाएं या विज्ञापन हटाना.
  • सदस्यताएं, अपने उपयोगकर्ताओं को कॉन्टेंट या सेवाओं का लगातार ऐक्सेस देने की सुविधा देते हैं. इसके लिए, वे समय-समय पर शुल्क देते रहते हैं. जैसे, समाचार सदस्यताएं या पैसे चुकाकर ली जाने वाली सदस्यताएं.

ज़रूरी शर्तें

Google Play Billing सेट अप करने के लिए, आपके पास ये चीज़ें होनी चाहिए:

ballwrap प्रोजेक्ट को अपडेट करें

अगर आपने ballwrap इंस्टॉल नहीं किया है, तो आपको इसे इंस्टॉल करना होगा. शुरू करने का तरीका जानने के लिए, आसानी से सिखाने वाली गाइड देखें. अगर आपके पास पहले से Bubblewrap मौजूद है, तो उसे 1.8.2 या इसके बाद वाले वर्शन पर अपडेट करें.

बबल रैप में फ़्लैग के पीछे की सुविधा भी होती है. इसे चालू करने के लिए, आपको प्रोजेक्ट के रूट में मौजूद twa-manifest.json में जाकर, प्रोजेक्ट के कॉन्फ़िगरेशन में बदलाव करना होगा. साथ ही, alphaDependencies और playBilling सुविधा, दोनों को चालू करना होगा:

  ...,
  "enableNotifications": true,
  "features": {
    "playBilling": {
      "enabled": true
    }
  },
  "alphaDependencies": {
    "enabled": true
  },
  ...

कॉन्फ़िगरेशन फ़ाइल अपडेट होने के बाद, प्रोजेक्ट में कॉन्फ़िगरेशन लागू करने के लिए bubblewrap update चलाएं. इसके बाद, bubblewrap build के बाद नया Android पैकेज जनरेट करें और इस पैकेज को Play Store पर अपलोड करें.

डिजिटल गुड्स एपीआई और Google Play Billing की उपलब्धता का पता लगाने वाली सुविधा

फ़िलहाल, Chrome पर डिजिटल गुड्स एपीआई सिर्फ़ तब काम करता है, जब PWA को भरोसेमंद वेब गतिविधि में लागू किया जा रहा हो. साथ ही, window ऑब्जेक्ट पर getDigitalGoodsService की जांच करके, यह पता लगाया जा सकता है कि यह उपलब्ध है या नहीं:

if ('getDigitalGoodsService' in window) {
 // Digital Goods API is supported!
}

डिजिटल गुड्स एपीआई किसी भी ब्राउज़र में उपलब्ध हो सकता है और अलग-अलग स्टोर के साथ काम करता है. यह देखने के लिए कि किसी खास स्टोर का बैकएंड काम करता है या नहीं, आपको स्टोर आईडी को पैरामीटर के तौर पर पास करके, getDigitalGoodsService() शुरू करना होगा. Google Play Store की पहचान https://play.google.com/billing स्ट्रिंग से की जाती है:

if ('getDigitalGoodsService' in window) {
  // Digital Goods API is supported!
  try {
    const service =
        await window.getDigitalGoodsService('https://play.google.com/billing');
    // Google Play Billing is supported!

  } catch (error) {
    // Google Play Billing is not available. Use another payment flow.
    return;
  }
}

किसी SKU की जानकारी वापस पाएं

डिजिटल गुड्स एपीआई, getDetails() की सुविधा देता है. इसकी मदद से, पेमेंट बैकएंड से प्रॉडक्ट का टाइटल, ब्यौरा, और कीमत जैसी जानकारी हासिल की जा सकती है.

फिर इस जानकारी को अपने यूज़र इंटरफ़ेस में इस्तेमाल किया जा सकता है और उपयोगकर्ता को ज़्यादा जानकारी दी जा सकती है:

const skuDetails = await service.getDetails(['shiny_sword', 'gem']);
for (item of skuDetails) {
  // Format the price according to the user locale.
  const localizedPrice = new Intl.NumberFormat(
      navigator.language,
      {style: 'currency', currency: item.price.currency}
    ).format(item.price.value);

  // Render the price to the UI.
  renderProductDetails(
        item.itemId, item.title, localizedPrice, item.description);
}

परचेज़ फ़्लो बनाना

PaymentRequest के लिए कंस्ट्रक्टर दो पैरामीटर का इस्तेमाल करता है: पेमेंट के तरीकों की सूची और पेमेंट के ब्यौरे की सूची.

भरोसेमंद वेब गतिविधि में, आपको Google Play बिलिंग के लिए पैसे चुकाने के तरीके का इस्तेमाल करना होगा. इसके लिए, आपको https://play.google.com/billing को आइडेंटिफ़ायर के तौर पर सेट करना होगा और प्रॉडक्ट SKU को डेटा सदस्य के तौर पर जोड़ना होगा:

async function makePurchase(service, sku) {
   // Define the preferred payment method and item ID
   const paymentMethods = [{
       supportedMethods: "https://play.google.com/billing",
       data: {
           sku: sku,
       }
   }];

   ...
}

पेमेंट के तरीके की जानकारी देना ज़रूरी होने पर भी, Play Billing उन वैल्यू को नज़रअंदाज़ कर देगा और Play Console में SKU बनाते समय सेट की गई वैल्यू का इस्तेमाल करेगा, ताकि उन्हें गलत वैल्यू से भरा जा सके:

const paymentDetails = {
    total: {
        label: `Total`,
        amount: {currency: `USD`, value: `0`}
    }
};

const request = new PaymentRequest(paymentMethods, paymentDetails);

पेमेंट फ़्लो शुरू करने के लिए, पेमेंट के अनुरोध से जुड़े ऑब्जेक्ट पर show() पर कॉल करें. अगर प्रोमिस सफल होता है, तो हो सकता है कि पेमेंट हो गया हो. अगर ऐसा नहीं होता है, तो हो सकता है कि उपयोगकर्ता ने पेमेंट रद्द कर दिया हो.

अगर वादा पूरा होता है, तो आपको खरीदारी की पुष्टि करनी होगी और उसे स्वीकार करना होगा. धोखाधड़ी से बचने के लिए, इस चरण को अपने बैकएंड का इस्तेमाल करके लागू करना होगा. बैकएंड में पुष्टि को लागू करने का तरीका जानने के लिए, Play Billing के दस्तावेज़ देखें. अगर आपने खरीदारी को स्वीकार नहीं किया, तो तीन दिनों के बाद, उपयोगकर्ता को रिफ़ंड मिलेगा और Google Play खरीदारी को रद्द कर देगा.

...
const request = new PaymentRequest(paymentMethods, paymentDetails);
try {
    const paymentResponse = await request.show();
    const {purchaseToken} = paymentResponse.details;

    // Call backend to validate and acknowledge the purchase.
    if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
        // Optional: tell the PaymentRequest API the validation was
        // successful. The user-agent may show a "payment successful"
        // message to the user.
        const paymentComplete = await paymentResponse.complete('success');
    } else {
        // Optional: tell the PaymentRequest API the validation failed. The
        // user agent may show a message to the user.
        const paymentComplete = await paymentResponse.complete('fail');
    }
} catch(e) {
    // The purchase failed, and we can handle the failure here. AbortError
    // usually means a user cancellation
}
...

इसके अलावा, खरीदारी को 'इस्तेमाल किया गया' के तौर पर मार्क करने और उसे फिर से खरीदने की अनुमति देने के लिए, consume() को purchaseToken पर कॉल किया जा सकता है.

सब कुछ एक साथ मिलाकर, खरीदारी का तरीका ऐसा दिखता है:

async function makePurchase(service, sku) {
    // Define the preferred payment method and item ID
    const paymentMethods = [{
        supportedMethods: "https://play.google.com/billing",
        data: {
            sku: sku,
        }
    }];

    // The "total" member of the paymentDetails is required by the Payment
    // Request API, but is not used when using Google Play Billing. We can
    // set it up with bogus details.
    const paymentDetails = {
        total: {
            label: `Total`,
            amount: {currency: `USD`, value: `0`}
        }
    };

    const request = new PaymentRequest(paymentMethods, paymentDetails);
    try {
        const paymentResponse = await request.show();
        const {purchaseToken} = paymentResponse.details;

        // Call backend to validate and acknowledge the purchase.
        if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
            // Optional: consume the purchase, allowing the user to purchase
            // the same item again.
            service.consume(purchaseToken);

            // Optional: tell the PaymentRequest API the validation was
            // successful. The user-agent may show a "payment successful"
            // message to the user.
            const paymentComplete =
                    await paymentResponse.complete('success');
        } else {
            // Optional: tell the PaymentRequest API the validation failed.
            // The user agent may show a message to the user.
            const paymentComplete = await paymentResponse.complete('fail');
        }
    } catch(e) {
        // The purchase failed, and we can handle the failure here.
        // AbortError usually means a user cancellation
    }
}

मौजूदा खरीदारी की स्थिति देखना

डिजिटल गुड्स एपीआई की मदद से, यह पता किया जा सकता है कि उपयोगकर्ता के पास पहले से की गई खरीदारी या पिछली खरीदारी से जुड़ा कोई मौजूदा एनटाइटलमेंट (इन-ऐप्लिकेशन खरीदारी, जिसका अब तक इस्तेमाल नहीं हुआ है या पहले से जारी सदस्यताएं) मौजूद हैं या नहीं. इन सदस्यताओं में, किसी दूसरे डिवाइस पर, किसी पिछले इंस्टॉल से, प्रोमो कोड से रिडीम किए गए या पिछली बार ऐप्लिकेशन खोलने पर शामिल सदस्यताएं भी शामिल हैं.


const service =
     await window.getDigitalGoodsService('https://play.google.com/billing');
...
const existingPurchases = await service.listPurchases();
for (const p of existingPurchases) {
    // Update the UI with items the user is already entitled to.
    console.log(`Users has entitlement for ${p.itemId}`);
}

इस दौरान, ऐसी खरीदारी की जांच करें जिसे पहले तो स्वीकार किया गया था, लेकिन उसे स्वीकार नहीं किया गया था. हमारा सुझाव है कि आप जल्द से जल्द खरीदारी की पुष्टि करें, ताकि यह पक्का किया जा सके कि आपके ऐप्लिकेशन में उपयोगकर्ताओं के एनटाइटलमेंट सही तरीके से दिखें.

const service =
     await window.getDigitalGoodsService("https://play.google.com/billing");
...
const existingPurchases = await service.listPurchases();
for (const p of existingPurchases) {
    await verifyOrAcknowledgePurchaseOnBackend(p.purchaseToken, p.itemId);

    // Update the UI with items the user is already entitled to.
    console.log(`Users has entitlement for ${p.itemId}`);
}

अपने इंटिग्रेशन की जांच करना

डेवलपमेंट Android डिवाइस पर

जांच के लिए, किसी डेवलपमेंट Android डिवाइस पर डिजिटल गुड्स एपीआई को चालू किया जा सकता है:

  • पक्का करें कि आपके डिवाइस में Android 9 या इसके बाद वाला वर्शन हो और डेवलपर मोड चालू हो.
  • Chrome 101 या इसके बाद का वर्शन इंस्टॉल करें.
  • chrome://flags पर जाकर और नाम से फ़्लैग करके, Chrome में इन फ़्लैग को चालू करें:
    • #enable-debug-for-store-billing
  • पक्का करें कि साइट, एचटीटीपीएस प्रोटोकॉल का इस्तेमाल करके होस्ट की गई है. http का इस्तेमाल करने से एपीआई, undefined हो जाएगा

ChromeOS डिवाइस पर

डिजिटल गुड्स एपीआई, ChromeOS 89 और इसके बाद के वर्शन पर उपलब्ध होगा. इस बीच, डिजिटल गुड्स एपीआई की जांच की जा सकती है:

  • डिवाइस पर, Play Store से अपना ऐप्लिकेशन इंस्टॉल करें.
  • पक्का करें कि साइट, एचटीटीपीएस प्रोटोकॉल का इस्तेमाल करके होस्ट की गई है. http का इस्तेमाल करने से एपीआई, undefined हो जाएगा

टेस्ट यूज़र और QA टीम के साथ

Play Store, टेस्टिंग के लिए शुल्क उपलब्ध कराता है. इसमें उपयोगकर्ता के टेस्ट खाते और टेस्ट SKU शामिल हैं. ज़्यादा जानकारी के लिए, Google Play Billing की जांच से जुड़ा दस्तावेज़ देखें.

इसके बाद कहां जाना है?

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