این راهنما برای برنامههای وبی است که بهصورت فعالیت وب مطمئن بستهبندی شدهاند. برای برنامههای Android نوشتهشده در Kotlin یا Java، به سند «خدمات صورتحساب Google Play» مراجعه کنید.
برنامههایی که در Google Play کالاهای دیجیتال یا اشتراک میفروشند باید از «خدمات صورتحساب Google Play» استفاده کنند. در «فعالیت وب مطمئن»، بااستفاده از میاناهای برنامهسازی کاربردی وب زیر که در Chrome 101 و نسخههای جدیدتر در Android و ChromeOS دردسترس است، با آن ادغام میشوید:
- Digital Goods API: جزئیات محصول و خریدهای کاربر را بازیابی میکند.
- Payment Request API: جریان خرید را شروع میکند.
الزامات
برای راهاندازی «خدمات صورتحساب Google Play»، به موارد زیر نیاز دارید:
- حساب توسعهدهنده Google Play و حساب فروشنده Google Payments که به یکدیگر پیوند شدهاند.
- فهرستگان «فروشگاه Play» با نسخه پخش در دسته هدف عمومی، آزمایش بسته، یا آزمایش داخلی.
- محصولات و اشتراکهای برنامهتان که در «کنسول Play» پیکربندی شدهاند.
- پروژه «فعالیت وب مطمئن» با پیکربندی Digital Asset Links فعال.
برای بارگیری برنامهتان از «فروشگاه Play» از کاربران هزینه دریافت نکنید. برنامه وب پیشرو شما همچنان در وب دردسترس است، بنابراین بارگیری پولی دسترسی را محدود نمیکند. درعوض، ویژگیها یا محتوا را با خرید درونبرنامه یا اشتراک بفروشید.
فعال کردن «خدمات صورتحساب Play» در پروژه Android
اگر برنامهتان را با Bubblewrap میسازید، ویژگی playBilling را در
twa-manifest.json در ریشه پروژهتان فعال کنید:
"features": {
"playBilling": {
"enabled": true
}
}
سپس bubblewrap update و بعداز آن bubblewrap build را اجرا کنید و بسته جدید Android را در «فروشگاه Play» بارگذاری کنید.
اگر برنامهتان را در Android Studio میسازید،
کتابخانه خدمات صورتحساب Play «کمکیار مرورگر Android» را اضافه کنید. برای تغییرات لازم
DelegationService و AndroidManifest.xml،
نسخه نمایشی twa-play-billing را ببینید.
بررسی پشتیبانی «خدمات صورتحساب Google Play»
با شناسه «فروشگاه Play» با getDigitalGoodsService() تماس بگیرید،
https://play.google.com/billing. اگر روش وجود ندارد یا تماس برقرار نمیشود،
از جریان پرداخت دیگری استفاده کنید:
if ('getDigitalGoodsService' in window) {
try {
const service =
await window.getDigitalGoodsService('https://play.google.com/billing');
// Google Play Billing is available.
} catch (error) {
// Google Play Billing isn't available. Use another payment flow.
}
}
نمایش جزئیات محصول
از getDetails() برای بازیابی عنوان، شرح، و قیمت شناسههای محصولتان استفاده کنید تا قیمتهایی که نمایش میدهید با «فروشگاه Play» مطابقت داشته باشد:
const details = await service.getDetails(['shiny_sword', 'gem']);
for (const item of details) {
const localizedPrice = new Intl.NumberFormat(
navigator.language,
{style: 'currency', currency: item.price.currency}
).format(item.price.value);
renderProductDetails(
item.itemId, item.title, localizedPrice, item.description);
}
Digital Goods API نمیتواند شناسههای محصولتان را فهرست کند. برای پرسمان کردن آنها از بخش پشتی، از Google Play Developer API استفاده کنید.
انجام خرید
PaymentRequest را با https://play.google.com/billing بهعنوان روش پرداخت و شناسه محصول را بهعنوان sku در data ایجاد کنید. «خدمات صورتحساب Google Play» از قیمت
«کنسول Play» استفاده میکند، بنابراین total الزامی است اما نادیده گرفته میشود.
پساز حل شدن show()، کد خرید را به باطن خود ارسال کنید تا
خرید را درستیسنجی و تأیید کند. اگر خریدی را ظرف سه روز تأیید نکنید، Google Play مبلغ را به کاربر مسترد میکند و خرید را لغو میکند.
async function makePurchase(service, sku) {
const paymentMethods = [{
supportedMethods: 'https://play.google.com/billing',
data: {sku},
}];
// Required by the Payment Request API, but ignored by Google Play Billing.
const paymentDetails = {
total: {label: 'Total', amount: {currency: 'USD', value: '0'}},
};
const request = new PaymentRequest(paymentMethods, paymentDetails);
try {
const response = await request.show();
const {purchaseToken} = response.details;
if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
// Optional: consume the purchase so the user can buy the item again.
await service.consume(purchaseToken);
await response.complete('success');
} else {
await response.complete('fail');
}
} catch (error) {
// An AbortError usually means the user canceled the purchase.
}
}
بررسی خریدهای کاربر
از listPurchases() برای پیدا کردن مواردی که کاربر مالک آنها است استفاده کنید، مثلاً اشتراکهای فعال،
خریدهای مصرفنشده، یا کدهای ترویجی پسخریدشده. هر خرید را در پسزمینهتان درستیسنجی کنید و هر خریدی را که تأیید نکردهاید تأیید کنید:
const purchases = await service.listPurchases();
for (const p of purchases) {
await verifyOrAcknowledgePurchaseOnBackend(p.purchaseToken, p.itemId);
// Update the UI with items the user is entitled to.
}
آزمایش کردن ادغام
برای آزمایش در دستگاه Android قبلاز انتشار در «فروشگاه Play»، این مراحل را دنبال کنید:
- از Android نسخه ۹ یا بالاتر با گزینههای توسعهدهندگان فعال استفاده کنید.
- در Chrome، به
chrome://flagsبروید و#enable-debug-for-store-billingرا فعال کنید. - سایتتان را ازطریق HTTPS ارائه دهید. Digital Goods API ازطریق HTTP دردسترس نیست.
وقتی برنامهتان از «فروشگاه Play» نصب شده باشد، به پرچم نیاز ندارید. برای آزمایش کردن با حسابهای آزمایشی و محصولات آزمایشی، به آزمایش کردن یکپارچهسازی «کتابخانه خدمات صورتحساب Google Play» مراجعه کنید.
مراحل بعدی
- خریدها را در پسزمینهتان با کتابخانه کارخواه Google Play Developer API بهتأیید برسانید.
- با نحوه فروش اشتراک آشنا شوید.
- اعلانهای بیدرنگ توسعهدهنده را برای پیگیری تغییرات اشتراک راهاندازی کنید.