שימוש בחיוב ב-Google Play בפעילות Trusted Web

המדריך הזה מיועד לאפליקציות אינטרנט שנארזו כפעילות Trusted Web. לאפליקציות ל-Android שכתובות ב-Kotlin או ב-Java, עיינו במסמכי התיעוד של החיוב ב-Google Play.

באפליקציות ב-Google Play שמוכרים בהן מוצרים דיגיטליים או מינויים, חובה להשתמש בחיוב ב-Google Play. בפעילות Trusted Web, אתם משלבים את זה באמצעות ממשקי ה-API הבאים לאינטרנט, שזמינים ב-Chrome 101 ואילך ב-Android וב-ChromeOS:

דרישות

כדי להגדיר את החיוב ב-Google Play, צריך:

אל תחייבו משתמשים על הורדת האפליקציה מחנות 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, פועלים לפי השלבים הבאים:

  1. להשתמש ב-Android מגרסה 9 ואילך עם אפשרויות למפתחים מופעלות.
  2. ב-Chrome, עוברים אל chrome://flags ומפעילים את #enable-debug-for-store-billing.
  3. האתר צריך להיות מוצג באמצעות HTTPS. ‫Digital Goods API לא זמין ב-HTTP.

אם האפליקציה מותקנת מחנות Play, אין צורך בדגל. כדי לבדוק עם חשבונות ומוצרים לבדיקה, עיינו במאמר בדיקת השילוב של ספריית החיובים ב-Google Play.

השלבים הבאים