अगर आपका ऐप्लिकेशन 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 को सेटअप करने के लिए, आपको इनकी ज़रूरत होगी:
- Google Play डेवलपर खाता और Google Payment से जुड़ा व्यापारी खाता, जो एक-दूसरे से लिंक हों.
- Play Store का स्टोर पेज, जिसमें सार्वजनिक, क्लोज़्ड टेस्टिंग या इंटरनल टेस्टिंग ट्रैक पर रिलीज़ की गई हो.
- Play Store पर अपने ऐप्लिकेशन के प्रॉडक्ट और सदस्यताएं बनाने और कॉन्फ़िगर करने के लिए.
- Bubblewrap से जनरेट किया गया प्रोजेक्ट, जिसमें डिजिटल एसेट लिंक कॉन्फ़िगरेशन काम कर रहा हो.
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 और सर्वर-साइड कॉम्पोनेंट मैनेज करते हैं.
- https://github.com/PEConn/beer पर जाकर, पीटर कॉन का सैंपल देखें
- खरीदारी की पुष्टि करने के बारे में, Play का दस्तावेज़ पढ़ें.
- Google Play Developer API की क्लाइंट लाइब्रेरी में से किसी एक का इस्तेमाल करें. ये कई भाषाओं में उपलब्ध हैं.
- अगर आपको अपने ऐप्लिकेशन में सदस्यता का कोई मॉडल लागू करना है, तो Play Billing की सदस्यता से जुड़ा दस्तावेज़ देखें.
- डेवलपर से जुड़ी रीयल-टाइम सूचनाएं (आरटीडीएन) लागू करें और सूचनाएं पाने के लिए सदस्यता लें. इससे Play पर सदस्यता की स्थिति में बदलाव होने पर, आपके बैकएंड को सूचना दी जाएगी.
- डुप्लीकेट सदस्यताओं से बचने के लिए,
linkedPurchaseToken
लागू करें. इसे सही तरीके से लागू करने के बारे में जानने के लिए, यह ब्लॉग पोस्ट पढ़ें.