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

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

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

इस गाइड में, आपको अपने पीडब्ल्यूए में 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 को सेटअप करने के लिए, आपको इनकी ज़रूरत होगी:

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

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

फ़िलहाल, 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 Billing के ज़रिए पैसे चुकाने के तरीके का इस्तेमाल करना होगा 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 पर नेविगेट करके और नाम से फ़्लैग करें:
    • #enable-debug-for-store-billing
  • पक्का करें कि साइट को एचटीटीपीएस प्रोटोकॉल का इस्तेमाल करके होस्ट किया गया हो. http का इस्तेमाल करने पर, एपीआई की वैल्यू undefined हो जाएगी

ChromeOS डिवाइस पर

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

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

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

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

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

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