תאריך פרסום: 2 בדצמבר 2020
בנוסף לאפשרות למכור באפליקציה מוצרים דיגיטליים ומינויים בחנות Play, חיוב ב-Google Play מציע כלים לניהול הקטלוג, המחירים והמינויים, דוחות שימושיים ותהליך תשלום שמבוסס על חנות Play ומוכרת למשתמשים. זוהי דרישה לאפליקציות שפורסמו בחנות Play ומוכרות מוצרים דיגיטליים.
לממשק Google Play Billing API יש טרמינולוגיה משלו, והוא כולל רכיבים לקוח ורכיבי קצה עורפי. הקטע הזה מכסה רק חלק קטן מ-API שספציפי לשימוש ב-Digital Goods API וב-Trusted Web Activity. לפני שמשלבים את החיוב ב-Google Play באפליקציה בסביבת הייצור, חשוב לקרוא את המסמכים בנושא חיוב ב-Google Play ולהבין את המושגים.
התהליך הבסיסי
כדי לספק מוצרים דיגיטליים דרך חנות Play, צריך להגדיר את הקטלוג בחנות Play ולקשר את חנות Play כאמצעי תשלום מה-PWA.
אפשר לעשות זאת בממשק של חנות Play באופן הבא:
- בתפריט של Play Console, לוחצים על מוצרים. הצגת המינויים והמוצרים הקיימים מתוך האפליקציה.
- לוחצים על Create product (יצירת מוצר) כדי להוסיף מוצר חדש.
- מוסיפים מזהה מוצר, שם, תיאור ומחיר. כדאי ליצור מזהי מוצרים משמעותיים וקלים לזכור, כי תצטרכו אותם בהמשך. לא ניתן לשנות את המזהים אחרי היצירה שלהם.
- אם יוצרים מינוי, צריך לציין גם תקופת חיוב. תוכלו לרשום את ההטבות של המינוי ולהוסיף תכונות כמו תקופות ניסיון בחינם, מחירי היכרות, תקופת חסד ואפשרות להירשם מחדש למינוי.
- לוחצים על הפעלה כדי להפוך את המוצר לזמין.
אם אתם מעדיפים, אתם יכולים להוסיף את המוצרים שלכם באמצעות Play Developers API.
אחרי שמגדירים את הקטלוג, השלב הבא הוא להגדיר את תהליך התשלום מה-PWA. שימוש בשילוב של Digital Goods API ו-Payment Request API.
אחזור מחיר של מוצר באמצעות Digital Goods API
כשמשתמשים בחיוב דרך Google Play, חשוב לוודא שהמחיר שמוצג למשתמשים תואם למחיר שבדף האפליקציה בחנות. אי אפשר לשמור על סנכרון ידני של המחירים האלה, ולכן API של מוצרים דיגיטליים מספק לאפליקציית האינטרנט דרך לשלוח שאילתה למחירים של ספק התשלומים הבסיסי:
// The SKU for the product, as defined in the Play Store interface
async function populatePrice(sku) {
try {
// Check if the Digital Goods API is supported by the browser.
if (window.getDigitalGoodsService) {
// The Digital Goods API can be supported by other Payments provider.
// In this case, we're retrieving the Google Play Billing provider.
const service =
await window.getDigitalGoodsService("https://play.google.com/billing");
// Fetch product details using the `getDetails()` method.
const details = await service.getDetails([sku]);
if (details.length === 0) {
console.log(`Could not get SKU: "${sku}".`);
return false;
}
// The details contain both the price and the currenncy.
item = details[0];
const value = item.price.value;
const currency = item.price.currency;
const formattedPrice = new Intl.NumberFormat(navigator.language, {
style: 'currency', currency: currency }).format(value);
// Display the price to the user.
document.getElementById("price").innerHTML = formattedPrice;
} else {
console.error("Could not get price for SKU \"" + sku + "\".");
}
} catch (error) {
console.log(error);
}
return false;
}
כדי לבדוק אם יש תמיכה ב-Digital Goods API, בודקים אם המאפיין getDigitalGoodsService()
זמין באובייקט window
.
לאחר מכן צריך להפעיל את window.getDigitalGoodsService()
ולציין את מזהה החיוב ב-Google Play כפרמטר.
הפעולה הזו מחזירה מופע של שירות לחיוב ב-Google Play, וספקים אחרים יכולים להטמיע תמיכה ב-Digital Goods API ויש להם מזהים שונים.
לבסוף, קוראים לפונקציה getDetails()
על ההפניה לאובייקט החיוב ב-Google Play, ומעבירים את המק"ט של הפריט כפרמטר. השיטה מחזירה אובייקט פרטים שמכיל גם את המחיר וגם את המטבע של הפריט, שאפשר להציג למשתמש.
התחלת תהליך הרכישה
Payment Request API מאפשר תהליכי רכישה באינטרנט, והוא משמש גם לשילוב של החיוב ב-Google Play. אם זו הפעם הראשונה שאתם משתמשים ב-PaymentRequest API, תוכלו לעיין במאמר איך פועל ה-API של בקשת התשלום.
כדי להשתמש ב-API עם חיוב ב-Google Play, צריך להוסיף אמצעי תשלום שיש לו שיטה נתמכת שנקראת https://play.google.com/billing
.
מוסיפים את המק"ט כחלק מהנתונים של המכשיר:
const supportedInstruments = [{
supportedMethods: "https://play.google.com/billing",
data: {
sku: sku
}
}];
לאחר מכן, יוצרים אובייקט PaymentRequest
כרגיל ומשתמשים ב-API כרגיל.
const request = new PaymentRequest(supportedInstruments, details);
אישור הרכישה
אחרי השלמת העסקה, משתמשים ב-Digital Goods API כדי לאשר את התשלום. אובייקט התגובה מה-PaymentRequest
מכיל אסימון שאפשר להשתמש בו כדי לאשר את העסקה:
const response = await request.show();
const token = response.details.token;
const service = await window.getDigitalGoodsService("https://play.google.com/billing");
await service.acknowledge(token, 'onetime');
ל-Digital Goods API ול-Payment Request API אין מידע על זהות המשתמש. לכן, אתם צריכים לשייך את הרכישה למשתמש בקצה העורפי ולוודא שיש לו גישה לפריטים שנרכשו. כשמשייכים את הרכישה למשתמש, חשוב לשמור את אסימון הרכישה כי יכול להיות שתצטרכו אותו כדי לאמת אם הרכישה בוטלה או אם קיבלתם החזר כספי, או אם המינוי עדיין פעיל. כדאי לעיין ב-Real Time Developer Notifications API וב-Google Play Developer API, כי הם מספקים נקודות קצה לטיפול בבקשות כאלה בקצה העורפי.
בדיקת הרשאות קיימות
יכול להיות שהמשתמש מימש קוד הטבה או שיש לו מינוי קיים למוצר שלכם. כדי לוודא שלמשתמש יש את ההרשאות המתאימות, אפשר להריץ את הפקודה listPurchases()
בשירות של המוצרים הדיגיטליים. הפונקציה הזו מחזירה את כל הרכישות שהלקוח ביצע באפליקציה. זה גם המקום שבו מאשרים רכישות שלא אושרו, כדי לוודא שהמשתמש מממש את הזכאות שלו בצורה נכונה.
const purchases = await itemService.listPurchases();
for (p of purchases) {
if (!p.acknowledged) {
await itemService.acknowledge(p.purchaseToken, 'onetime');
}
}