अगर आपका ऐप्लिकेशन Google Play से उपलब्ध है और आपको डिजिटल सामान बेचना है या सदस्यताएं ऑफ़र करनी हैं, तो आपको Google Play Billing का इस्तेमाल करना होगा. Google Play Billing की मदद से, अपने कैटलॉग, कीमतों, और सदस्यताओं को मैनेज करने के साथ-साथ काम की रिपोर्ट भी देखी जा सकती हैं. साथ ही, इसमें Play Store की मदद से चेकआउट करने का तरीका भी शामिल है, जो आपके उपयोगकर्ताओं को पहले से ही पता है.
भरोसेमंद वेब गतिविधियों का इस्तेमाल करके बनाए गए और Google Play Store से डिलीवर किए जाने वाले ऐप्लिकेशन के लिए, अब पेमेंट रिक्वेस्ट एपीआई और डिजिटल सामान एपीआई का इस्तेमाल करके, Google Play बिलिंग के साथ इंटिग्रेट किया जा सकता है. यह सुविधा, Android और ChromeOS के लिए Chrome 101 और उसके बाद के वर्शन पर उपलब्ध है.
इस गाइड में, आपको अपने PWA में Google Play Billing की सुविधा जोड़ने और उसे ChromeOS और Play Store, दोनों के लिए Google 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 सेट अप करने के लिए, आपको इन चीज़ों की ज़रूरत होगी:
- Google Play डेवलपर खाता और Google पेमेंट्स का व्यापारी/कंपनी खाता, जो एक-दूसरे से लिंक हों.
- Play Store का स्टोर पेज, जिसमें सार्वजनिक, क्लोज़्ड टेस्टिंग या इंटरनल टेस्टिंग ट्रैक पर रिलीज़ की गई हो.
- Play Store पर अपने ऐप्लिकेशन के प्रॉडक्ट और सदस्यताएं बनाने और कॉन्फ़िगर करने के लिए.
- Bubblewrap से जनरेट किया गया प्रोजेक्ट, जिसमें डिजिटल एसेट लिंक कॉन्फ़िगरेशन काम कर रहा हो.
Bubblewrap प्रोजेक्ट को अपडेट करना
अगर आपने Bubblewrap इंस्टॉल नहीं किया है, तो आपको इसे इंस्टॉल करना होगा. शुरू करने के तरीके के बारे में जानने के लिए, आसानी से सीखें गाइड देखें. अगर आपके पास पहले से ही Bubblewrap है, तो पक्का करें कि आपने इसे 1.8.2 या इसके बाद के वर्शन पर अपडेट कर लिया हो.
Bubblewrap में भी फ़्लैग की सुविधा है. इसे चालू करने के लिए, आपको प्रोजेक्ट के रूट में मौजूद 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
}
}
मौजूदा खरीदारी की स्थिति देखना
Digital Goods API की मदद से, यह देखा जा सकता है कि उपयोगकर्ता के पास पहले की गई खरीदारी से कोई मौजूदा एनटाइटलमेंट (ऐप्लिकेशन में की गई ऐसी खरीदारी जो अब तक इस्तेमाल नहीं की गई है या चालू सदस्यताएं) है या नहीं. भले ही, वह खरीदारी किसी दूसरे डिवाइस पर की गई हो, पिछले इंस्टॉल से की गई हो, प्रमो कोड से रिडीम की गई हो या ऐप्लिकेशन को पिछली बार खोलने के दौरान की गई हो.
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://flags
पर जाकर और फ़्लैग को नाम से खोजकर, Chrome में ये फ़्लैग चालू करें:#enable-debug-for-store-billing
- पक्का करें कि साइट को https प्रोटोकॉल का इस्तेमाल करके होस्ट किया गया हो. http का इस्तेमाल करने पर, एपीआई
undefined
हो जाएगा
ChromeOS डिवाइस पर
Digital Goods API, ChromeOS के 89 वर्शन से शुरू होने वाले स्टेबल वर्शन पर उपलब्ध होगा. इस बीच, डिजिटल प्रॉडक्ट के एपीआई की जांच की जा सकती है:
- डिवाइस पर Play Store से अपना ऐप्लिकेशन इंस्टॉल करें.
- पक्का करें कि साइट को https प्रोटोकॉल का इस्तेमाल करके होस्ट किया गया हो. http का इस्तेमाल करने पर, एपीआई
undefined
हो जाएगा
टेस्ट उपयोगकर्ताओं और क्यूए टीमों के साथ
Play Store, टेस्टिंग के लिए कई सुविधाएं उपलब्ध कराता है. इनमें, उपयोगकर्ता के टेस्ट खाते और टेस्ट एसकेयू शामिल हैं. ज़्यादा जानकारी के लिए, Google Play Billing की जांच से जुड़ा दस्तावेज़ देखें.
आगे क्या करना है?
इस दस्तावेज़ में बताया गया है कि Play Billing API में क्लाइंट-साइड कॉम्पोनेंट होते हैं. इन्हें Digital Goods API और सर्वर-साइड कॉम्पोनेंट मैनेज करते हैं.
- https://github.com/PEConn/beer पर जाकर, पीटर कॉन का सैंपल देखें
- खरीदारी की पुष्टि करने के बारे में, Play का दस्तावेज़ पढ़ें.
- Google Play Developer API की क्लाइंट लाइब्रेरी में से किसी एक का इस्तेमाल करें. ये कई भाषाओं में उपलब्ध हैं.
- अगर आपको अपने ऐप्लिकेशन में सदस्यता का कोई मॉडल लागू करना है, तो Play Billing की सदस्यता से जुड़ा दस्तावेज़ देखें.
- डेवलपर से जुड़ी रीयल-टाइम सूचनाएं (आरटीडीएन) लागू करें और सूचनाओं के लिए सदस्यता लें, ताकि किसी सदस्यता की स्थिति में बदलाव होने पर, आपके बैकएंड को सूचना मिल सके. इसके लिए, आपको Play पर सदस्यता की स्थिति को बार-बार देखने की ज़रूरत नहीं पड़ेगी.
- डुप्लीकेट सदस्यताओं से बचने के लिए,
linkedPurchaseToken
लागू करें. इसे सही तरीके से लागू करने के बारे में जानने के लिए, यह ब्लॉग पोस्ट पढ़ें.