যদি আপনার অ্যাপটি Google Play এর মাধ্যমে বিতরণ করা হয় এবং আপনি ডিজিটাল পণ্য বিক্রি করতে চান বা সদস্যতা অফার করতে চান, তাহলে আপনাকে অবশ্যই Google Play বিলিং ব্যবহার করতে হবে। Google Play বিলিং আপনার ক্যাটালগ, মূল্য এবং সদস্যতা, দরকারী প্রতিবেদন এবং Play Store দ্বারা চালিত একটি চেকআউট ফ্লো পরিচালনা করার জন্য সরঞ্জামগুলি অফার করে যা আপনার ব্যবহারকারীদের কাছে ইতিমধ্যেই পরিচিত৷
বিশ্বস্ত ওয়েব অ্যাক্টিভিটিগুলি ব্যবহার করে তৈরি করা অ্যাপগুলির জন্য এবং Google Play স্টোরের মাধ্যমে বিতরণ করা হয়েছে, আপনি এখন Google Play বিলিং-এর সাথে একীভূত করতে অর্থপ্রদানের অনুরোধ API এবং Digital Goods API ব্যবহার করতে পারেন৷ এটি Android এবং ChromeOS এর জন্য Chrome 101 এবং তার উপরে উপলব্ধ।
এই নির্দেশিকাটিতে, আপনি শিখবেন কীভাবে আপনার PWA-তে Google Play বিলিং সমর্থন যোগ করবেন এবং ChromeOS এবং Play Store উভয়ের জন্য Google Play Store-এ বিতরণের জন্য প্যাকেজ করবেন।
আপনার PWA-তে প্লে বিলিং সমর্থন যোগ করতে আপনি দুটি ওয়েব প্ল্যাটফর্ম API ব্যবহার করবেন। ডিজিটাল গুডস API SKU তথ্য সংগ্রহ করতে এবং Play Store থেকে কেনাকাটা এবং এনটাইটেলমেন্ট চেক করতে ব্যবহার করা হয়। অর্থপ্রদানের অনুরোধ API Google Play স্টোরকে অর্থপ্রদানের পদ্ধতি হিসাবে কনফিগার করতে এবং ক্রয় প্রবাহ সম্পূর্ণ করতে ব্যবহৃত হয়।
প্লে স্টোরে অ্যাপ্লিকেশনগুলি কীভাবে নগদীকরণ করবেন
প্লে স্টোরে Google Play বিলিংয়ের মাধ্যমে আপনার অ্যাপ্লিকেশনটি নগদীকরণ করতে পারে এমন দুটি উপায় রয়েছে:
- অ্যাপ-মধ্যস্থ কেনাকাটাগুলি টেকসই এবং ব্যবহারযোগ্য ভার্চুয়াল পণ্য বিক্রি করার অনুমতি দেয়, যেমন অতিরিক্ত বৈশিষ্ট্য বা বিজ্ঞাপনগুলি সরানো।
- সাবস্ক্রিপশন , সংবাদ সদস্যতা বা সদস্যতার মতো পুনরাবৃত্ত ফি দিয়ে আপনার ব্যবহারকারীদের সামগ্রী বা পরিষেবাগুলিতে চলমান অ্যাক্সেস অফার করে।
প্রয়োজনীয়তা
Google Play বিলিং সেটআপ করার জন্য, আপনার প্রয়োজন হবে:
- একটি Google Play বিকাশকারী অ্যাকাউন্ট এবং একটি Google পেমেন্ট বণিক অ্যাকাউন্ট যা একে অপরের সাথে সংযুক্ত ।
- সর্বজনীন, ক্লোজড টেস্টিং বা অভ্যন্তরীণ টেস্টিং ট্র্যাকের উপর একটি রিলিজ সহ একটি প্লে স্টোর তালিকা ৷
- প্লে স্টোরে আপনার অ্যাপের পণ্য এবং সদস্যতা তৈরি এবং কনফিগার করতে ।
- একটি কার্যকরী ডিজিটাল সম্পদ লিঙ্ক কনফিগারেশন সহ একটি বুদবুদ তৈরি করা প্রকল্প ।
Bubblewrap প্রকল্প আপডেট করুন
আপনার যদি Bubblewrap ইনস্টল না থাকে তবে আপনাকে এটি ইনস্টল করতে হবে। কিভাবে শুরু করতে হয় তার বিস্তারিত জানার জন্য দ্রুত শুরু নির্দেশিকা দেখুন। আপনার যদি ইতিমধ্যেই Bubblewrap থাকে, তাহলে 1.8.2 বা তার উপরে সংস্করণে আপডেট করতে ভুলবেন না।
একটি পতাকার পিছনে বাবল র্যাপের বৈশিষ্ট্যও রয়েছে। এটি সক্ষম করার জন্য, আপনাকে প্রকল্পের মূলে অবস্থিত twa-manifest.json
এ প্রকল্পের কনফিগারেশন পরিবর্তন করতে হবে এবং alphaDependencies
এবং playBilling
বৈশিষ্ট্য উভয়ই সক্ষম করতে হবে:
...,
"enableNotifications": true,
"features": {
"playBilling": {
"enabled": true
}
},
"alphaDependencies": {
"enabled": true
},
...
কনফিগারেশন ফাইল আপডেট করার সাথে সাথে, প্রকল্পে কনফিগারেশন প্রয়োগ করতে bubblewrap update
চালান, তারপরে একটি নতুন অ্যান্ড্রয়েড প্যাকেজ তৈরি করতে এবং প্লে স্টোরে এই প্যাকেজটি আপলোড করতে bubblewrap build
করুন৷
ডিজিটাল গুডস API এবং 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);
}
ক্রয় প্রবাহ তৈরি করুন
একটি পেমেন্ট রিকোয়েস্টের কনস্ট্রাক্টর দুটি প্যারামিটার নেয়: পেমেন্ট পদ্ধতির একটি তালিকা এবং পেমেন্টের বিবরণের একটি তালিকা।
বিশ্বস্ত ওয়েব কার্যকলাপের ভিতরে থাকাকালীন, আপনাকে অবশ্যই https://play.google.com/billing
শনাক্তকারী হিসাবে সেট করে এবং ডেটা সদস্য হিসাবে পণ্য SKU যোগ করে Google Play বিলিং অর্থপ্রদানের পদ্ধতি ব্যবহার করতে হবে:
async function makePurchase(service, sku) {
// Define the preferred payment method and item ID
const paymentMethods = [{
supportedMethods: "https://play.google.com/billing",
data: {
sku: sku,
}
}];
...
}
যদিও অর্থপ্রদানের বিশদ বিবরণ প্রয়োজন, প্লে বিলিং সেই মানগুলিকে উপেক্ষা করবে এবং প্লে কনসোলে SKU তৈরি করার সময় সেট করা মানগুলি ব্যবহার করবে, যাতে সেগুলি ভুয়া মান দিয়ে পূর্ণ হতে পারে:
const paymentDetails = {
total: {
label: `Total`,
amount: {currency: `USD`, value: `0`}
}
};
const request = new PaymentRequest(paymentMethods, paymentDetails);
পেমেন্ট ফ্লো শুরু করতে পেমেন্ট রিকোয়েস্ট অবজেক্টের show()
কে কল করুন। প্রতিশ্রুতি সফল হলে পেমেন্ট সফল হতে পারে। যদি এটি ব্যর্থ হয়, ব্যবহারকারী সম্ভবত অর্থপ্রদান বাতিল করেছেন।
প্রতিশ্রুতি সফল হলে, আপনাকে যাচাই করতে হবে এবং ক্রয় স্বীকার করতে হবে। জালিয়াতির বিরুদ্ধে সুরক্ষার জন্য, এই পদক্ষেপটি আপনার ব্যাকএন্ড ব্যবহার করে প্রয়োগ করা আবশ্যক৷ আপনার ব্যাকএন্ডে যাচাইকরণ কীভাবে বাস্তবায়ন করবেন তা শিখতে প্লে বিলিং ডকুমেন্টেশন দেখুন। আপনি যদি ক্রয়টি স্বীকার না করেন, তিন দিন পরে, ব্যবহারকারী একটি ফেরত পাবেন এবং 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 9 বা তার বেশি ব্যবহার করছেন তা নিশ্চিত করুন৷
- Chrome 101 বা নতুন ইনস্টল করুন।
-
chrome://flags
এ নেভিগেট করে এবং নামের দ্বারা পতাকা অনুসন্ধান করে Chrome-এ নিম্নলিখিত পতাকাগুলি সক্ষম করুন:-
#enable-debug-for-store-billing
-
- নিশ্চিত করুন যে সাইটটি একটি https প্রোটোকল ব্যবহার করে হোস্ট করা হয়েছে। HTTP ব্যবহার করলে এপিআই
undefined
হবে
একটি ChromeOS ডিভাইসে
ডিজিটাল গুডস এপিআই 89 সংস্করণ থেকে শুরু করে ChromeOS স্ট্যাবলে উপলব্ধ হবে। ইতিমধ্যে, ডিজিটাল গুডস এপিআই পরীক্ষা করা সম্ভব:
- ডিভাইসে প্লে স্টোর থেকে আপনার অ্যাপটি ইনস্টল করুন।
- নিশ্চিত করুন যে সাইটটি একটি https প্রোটোকল ব্যবহার করে হোস্ট করা হয়েছে। HTTP ব্যবহার করলে এপিআই
undefined
হবে
পরীক্ষা ব্যবহারকারী এবং QA টিমের সাথে
প্লে স্টোর ব্যবহারকারীর পরীক্ষার অ্যাকাউন্ট এবং পরীক্ষা SKU সহ পরীক্ষার জন্য সুবিধা প্রদান করে। আরও তথ্যের জন্য Google Play বিলিং পরীক্ষার ডকুমেন্টেশন দেখুন।
পরের দিকে কোথায় যেতে হবে?
এই নথিতে যেমন আলোচনা করা হয়েছে, প্লে বিলিং এপিআই-এর ক্লায়েন্ট-সাইড কম্পোনেন্ট রয়েছে, যা ডিজিটাল গুডস এপিআই এবং সার্ভার-সাইড কম্পোনেন্ট দ্বারা পরিচালিত হয়।
- https://github.com/PEConn/beer এ পিটার কনের নমুনাটি দেখুন
- ক্রয় যাচাইকরণে প্লে ডকুমেন্টেশন দেখুন।
- Google Play Developer API ক্লায়েন্ট লাইব্রেরিগুলির একটি ব্যবহার করার কথা বিবেচনা করুন, যা একাধিক ভাষায় উপলব্ধ৷
- আপনার অ্যাপ্লিকেশানে সাবস্ক্রিপশন মডেল প্রয়োগ করলে, প্লে বিলিং সাবস্ক্রিপশন ডকুমেন্টেশন দেখুন।
- রিয়েল-টাইম ডেভেলপার নোটিফিকেশন (RTDN) প্রয়োগ করুন এবং বিজ্ঞপ্তির জন্য সদস্যতা নিন যাতে প্লে-তে তাদের স্থিতি পোল করার পরিবর্তে সাবস্ক্রিপশনের অবস্থা পরিবর্তিত হলে আপনার ব্যাকএন্ড সূচিত হয়।
- ডুপ্লিকেট সাবস্ক্রিপশন প্রতিরোধ করতে
linkedPurchaseToken
প্রয়োগ করুন। কিভাবে সঠিকভাবে এটি বাস্তবায়ন করতে এই ব্লগ পোস্ট পড়ুন.