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

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

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

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

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

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

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

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

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

Google Play Billing को सेटअप करने के लिए, आपको इनकी ज़रूरत होगी:

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

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

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

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

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

Digital Goods API और Google Play Billing की उपलब्धता का पता लगाने वाली सुविधा

फ़िलहाल, Digital Goods API का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब PWA को भरोसेमंद वेब गतिविधि में चलाया जा रहा हो. साथ ही, window ऑब्जेक्ट पर getDigitalGoodsService की जांच करके यह पता लगाया जा सकता है कि यह उपलब्ध है या नहीं:

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

Digital Goods API किसी भी ब्राउज़र में उपलब्ध हो सकता है और अलग-अलग स्टोर के साथ काम कर सकता है. यह देखने के लिए कि कोई खास स्टोर बैकएंड काम करता है या नहीं, आपको स्टोर आईडी को पैरामीटर के तौर पर 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 की जानकारी पाना

Digital Goods API, 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() को कॉल करें. अगर Promise फ़ंक्शन काम करता है, तो इसका मतलब है कि पेमेंट हो गया है. अगर पेमेंट नहीं हो पाता है, तो हो सकता है कि उपयोगकर्ता ने पेमेंट रोक दिया हो.

अगर प्रॉडक्ट उपलब्ध हो जाता है, तो आपको खरीदारी की पुष्टि करनी होगी. धोखाधड़ी से बचने के लिए, यह चरण आपके बैकएंड का इस्तेमाल करके लागू किया जाना चाहिए. अपने बैकएंड में पुष्टि करने की सुविधा लागू करने का तरीका जानने के लिए, 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 डिवाइस पर Digital Goods API को चालू किया जा सकता है:

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

ChromeOS डिवाइस पर

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

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

टेस्ट उपयोगकर्ताओं और QA टीमों के साथ

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

आगे क्या करना है?

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