המדריך הזה מיועד לאפליקציות אינטרנט שנארזו כפעילות Trusted Web. לאפליקציות ל-Android שכתובות ב-Kotlin או ב-Java, עיינו במסמכי התיעוד של החיוב ב-Google Play.
באפליקציות ב-Google Play שמוכרים בהן מוצרים דיגיטליים או מינויים, חובה להשתמש בחיוב ב-Google Play. בפעילות Trusted Web, אתם משלבים את זה באמצעות ממשקי ה-API הבאים לאינטרנט, שזמינים ב-Chrome 101 ואילך ב-Android וב-ChromeOS:
- Digital Goods API: מאחזר את פרטי המוצר הדיגיטלי ואת הרכישות של המשתמש.
- Payment Request API: מפעיל את תהליך הרכישה.
דרישות
כדי להגדיר את החיוב ב-Google Play, צריך:
- חשבון פיתוח ב-Google Play וחשבון של מוכר/ת ב-Google Payments שמקושרים זה לזה.
- דף אפליקציה בחנות Play עם גרסה במסלול הציבורי, במסלול לבדיקה בקבוצה מוגדרת או במסלול לבדיקה פנימית.
- המוצרים והמינויים של האפליקציה שהוגדרו ב-Play Console.
- פרויקט של פעילות Trusted Web עם הגדרת Digital Asset Links תקינה.
אל תחייבו משתמשים על הורדת האפליקציה מחנות Play. אפליקציית ה-PWA עדיין זמינה באינטרנט, כך שהורדה בתשלום לא מגבילה את הגישה. במקום זאת, אפשר למכור תכונות או תוכן באמצעות רכישות באפליקציה או מינויים.
הפעלת החיוב ב-Play בפרויקט ל-Android
אם אתם מפתחים את האפליקציה באמצעות Bubblewrap, אתם צריכים להפעיל את התכונה playBilling בקובץ twa-manifest.json בתיקיית השורש של הפרויקט:
"features": {
"playBilling": {
"enabled": true
}
}
לאחר מכן מריצים את bubblewrap update ואז את bubblewrap build, ומעלים את חבילת Android החדשה לחנות Play.
אם אתם מפתחים את האפליקציה ב-Android Studio, הוסיפו את ספריית החיובים ב-Google Play של Android Browser Helper. כדי לראות את השינויים הנדרשים ב-DelegationService וב-AndroidManifest.xml, עיינו בהדגמה של twa-play-billing.
בדיקה אם יש תמיכה בחיוב ב-Google Play
מפעילים את getDigitalGoodsService() עם המזהה של חנות Play, 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 לא יכול להציג את מזהי המוצרים שלכם. כדי לשלוח שאילתות לגביהם מה-backend, צריך להשתמש ב-ממשק API של Google Play למפתחים.
ביצוע רכישה
יוצרים PaymentRequest עם https://play.google.com/billing כאמצעי התשלום ומזהה המוצר כ-sku ב-data. חיוב ב-Google Play משתמש במחיר מ-Play Console, ולכן צריך להזין את 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 מגרסה 9 ואילך עם אפשרויות למפתחים מופעלות.
- ב-Chrome, עוברים אל
chrome://flagsומפעילים את#enable-debug-for-store-billing. - האתר צריך להיות מוצג באמצעות HTTPS. Digital Goods API לא זמין ב-HTTP.
אם האפליקציה מותקנת מחנות Play, אין צורך בדגל. כדי לבדוק עם חשבונות ומוצרים לבדיקה, עיינו במאמר בדיקת השילוב של ספריית החיובים ב-Google Play.
השלבים הבאים
- מאמתים את הרכישות בקצה העורפי באמצעות ספריית לקוח של Google Play Developer API.
- איך מוכרים מינויים
- כדי לעקוב אחרי שינויים במינויים, כדאי להגדיר התראות בזמן אמת למפתחים.