ใช้ Google Play Billing ใน PWA

หาก PWA แสดงอยู่ใน Google Play และคุณต้องการสร้างรายได้จาก PWA โดยการขายไอเทมที่ซื้อในแอปหรือการสมัครใช้บริการ นโยบายของ Play จะกำหนดให้คุณใช้ Play Billing คุณจะต้องติดตั้งใช้งาน API 2 รายการใน PWA ได้แก่ Digital Goods API และ Payment Request API

Digital Goods API

Digital Goods API เป็นอินเทอร์เฟซระหว่างแอปของคุณกับ Google Play ซึ่งจะช่วยให้คุณดึงข้อมูลผลิตภัณฑ์ดิจิทัลและรายละเอียดที่คุณป้อนสำหรับไอเทมที่ซื้อในแอปและการสมัครใช้บริการใน Play Console รวมถึงดึงข้อมูลการซื้อที่มีอยู่ซึ่งผู้ใช้ได้ทำไว้ หากยังไม่ได้เพิ่มไอเทมที่ซื้อในแอปหรือการสมัครใช้บริการใน Play Console โปรดทำตามการตั้งค่า Play Console สำหรับการเรียกเก็บเงินของ Play

เมื่อวันที่ 30 พฤศจิกายน 2021 เราได้เปิดตัว ChromeOS 96 พร้อมการติดตั้งใช้งาน Digital Goods API 2.0

ช่วงทดลองใช้จากต้นทางสำหรับ Digital Goods API เวอร์ชันแรกสิ้นสุดลงเมื่อวันที่ 30 มกราคม 2022 ดังนั้นเราจึงเลิกใช้ API นี้แล้ว และมีเฉพาะ API เวอร์ชัน 2 เท่านั้นที่พร้อมใช้งาน

เมื่อวันที่ 23 มิถุนายน 2022 เราได้เปิดตัว ChromeOS 103 พร้อมการติดตั้งใช้งาน Digital Goods API 2.1 รุ่นนี้ไม่มีการเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง และมีเพียงเมธอดใหม่และฟิลด์เพิ่มเติม ได้แก่ listPurchaseHistory() และ itemType

ลงทะเบียนเข้าร่วมช่วงทดลองใช้จากต้นทาง

หมายเหตุ: ขณะนี้ Digital Goods API พร้อมให้บริการผ่านOrigin Trial ซึ่งเป็นกลไกที่ช่วยให้นักพัฒนาแอปเข้าถึง Web API ใหม่ๆ ได้ก่อนใคร คุณจะต้องลงทะเบียนช่วงทดลองใช้ Digital Goods API v2 และขอโทเค็น ซึ่งคุณจะต้องระบุในหน้าใดก็ได้ในต้นทาง

เมื่อลงทะเบียนเพื่อทดลองใช้ Origin คุณจะเห็นวันที่ "ใช้ได้จนถึง" ซึ่งเป็นวันที่ที่รับประกันว่าโทเค็นจะใช้งานได้จนถึงวันดังกล่าว อย่าลืมต่ออายุโทเค็นเมื่อใกล้ถึงวันที่ดังกล่าวเพื่อเข้าร่วมการทดลองใช้ต่อไป API ที่เสนอเป็นช่วงทดลองใช้จากต้นทางอาจมีการเปลี่ยนแปลง ดังนั้นโปรดติดตามการเปลี่ยนแปลงล่าสุดของช่วงทดลองใช้จากต้นทางที่คุณเข้าร่วม หากพบปัญหา โปรดดูเอกสารประกอบเกี่ยวกับ Digital Goods API

Payment Request API

Payment Request API จะจัดการธุรกรรมการชำระเงินจริงเมื่อมีการซื้อ โดยจะใช้รายละเอียดไอเทมที่ Digital Goods API ระบุไว้เพื่อทำการซื้อในแอปโดยใช้วิธีการชำระเงินที่เหมาะสม ซึ่งในกรณีนี้คือ Google Play Billing

ตรวจหาฟีเจอร์ Digital Goods API

คุณตรวจหาได้ว่าได้เปิดใช้ API ในเว็บไซต์อย่างถูกต้องหรือไม่ผ่านช่วงทดลองใช้แหล่งที่มาโดยตรวจสอบเมธอด getDigitalGoodsService ในออบเจ็กต์ window

if ('getDigitalGoodsService' in window) {
  // Digital Goods API is supported!
} else {
  console.log('DigitalGoodsService is not available.');
  // Use another payment method
}

เชื่อมต่อกับบริการเรียกเก็บเงินของ Google Play

Digital Goods API ออกแบบมาให้ใช้งานร่วมกับเบราว์เซอร์และร้านค้าดิจิทัลต่างๆ ได้ เช่นเดียวกับ Payment Request API ที่ใช้ได้กับทุกเบราว์เซอร์และใช้กับผู้ให้บริการชำระเงินต่างๆ ได้ หากต้องการรับอินสแตนซ์ของบริการที่เชื่อมโยงกับ Google Play Billing ให้ส่งสตริง "https://play.google.com/billing" เป็นวิธีการชำระเงินไปยัง getDigitalGoodsService()

หากเมธอดแสดงข้อผิดพลาด แสดงว่าวิธีการชำระเงินของ Google Play Billing ไม่พร้อมใช้งาน (เช่น ผู้ใช้เข้าถึง PWA ผ่านเบราว์เซอร์) แต่คุณควรเสนอวิธีการชำระเงินอื่นสำหรับธุรกรรมแทน

if ('getDigitalGoodsService' in window) {
  // Digital Goods API is supported!
  try {
    const service = await window.getDigitalGoodsService('https://play.google.com/billing');
    // Google Play Billing service is available
  } catch (error) {
    // Google Play Billing service is not available. Use another payment flow.
  }
}

ดูรายละเอียดสินค้า

เมื่อเชื่อมต่อบริการสินค้าดิจิทัลกับ Google Play แล้ว คุณจะใช้ API เพื่อดึงข้อมูลเกี่ยวกับผลิตภัณฑ์และการซื้อได้

getDetails() เมธอดช่วยให้คุณได้รับข้อมูลเกี่ยวกับรายการที่คุณตั้งค่าไว้ใน Play Console ข้อมูล เช่น ชื่อผลิตภัณฑ์ คำอธิบาย และราคา ควรแสดงต่อผู้ใช้ใน UI ของแอปเพื่อให้ผู้ใช้ทราบว่ามีอะไรให้ซื้อบ้างและราคาเท่าใด

getDetails() วิธีนี้จะต้องมีรายการรหัสไอเทมที่สอดคล้องกับรหัสผลิตภัณฑ์ของไอเทมที่ซื้อในแอปและการสมัครใช้บริการที่คุณสร้างใน Play Console

const itemDetails = await service.getDetails(['product_1', 'product_2', 'product_3']);
for (const item of itemDetails) {
  // Display item information to user
  displayItem(item.title, item.description, item.price);
}

หากต้องการทราบราคาที่เหมาะสมสำหรับภาษาของผู้ใช้ คุณจะต้องจัดรูปแบบเพิ่มเติมดังนี้

const localePrice = new Intl.NumberFormat(navigator.language, {
  style: 'currency',
  currency: item.price.currency,
}).format(item.price.value);

หมายเหตุ: Digital Goods API ไม่มีวิธีการให้คุณดูรายการรหัสสินค้า แต่คุณจะต้องฮาร์ดโค้ดลงในไคลเอ็นต์หรือดึงข้อมูลจากเซิร์ฟเวอร์แบ็กเอนด์แทน Google Play Developer API อนุญาตให้คุณค้นหารายการรหัสสินค้าจากแบ็กเอนด์ (ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งใช้งานคอมโพเนนต์การเรียกเก็บเงินที่สำคัญของ Google Play ในเซิร์ฟเวอร์แบ็กเอนด์ ไม่ว่าคุณจะเลือกโซลูชันใด โปรดตรวจสอบว่ารหัสสินค้าสอดคล้องกับรหัสใน Play Console

ใน API เวอร์ชัน 2.1 หนึ่งในช่องที่ getDetails() แสดงผลคือ itemType ซึ่งเป็น Enum ที่มีค่าเป็น ”product” หรือ ”subscription” เพื่อระบุว่ารายการที่เกี่ยวข้องเป็นไอเทมที่ซื้อในแอปหรือการสมัครใช้บริการตามลำดับ การแยกความแตกต่างระหว่างผลิตภัณฑ์ 2 ประเภทนี้จะมีประโยชน์ในกรณีที่คุณต้องใช้การรักษาที่แตกต่างกันกับผลิตภัณฑ์แต่ละประเภท เช่น คุณอาจมีหน้าเว็บเฉพาะสำหรับให้ผู้ใช้สมัครใช้บริการ และอีกหน้าเว็บสำหรับผลิตภัณฑ์อื่นๆ ที่ไม่ต้องสมัครใช้บริการ นอกจากนี้ ยังมีประโยชน์ในการทราบแหล่งข้อมูล REST ของ Google Play Developer API ที่เหมาะสมเพื่อใช้ในแบ็กเอนด์ (purchases.products หรือ purchases.subscriptions)

ซื้อสินค้า

เมื่อระบบแสดงผลิตภัณฑ์และรายละเอียดต่อผู้ใช้แล้ว คุณจะสร้างขั้นตอนการซื้อด้วย Payment Request API ได้ เมื่อใช้ร่วมกับ Digital Goods API คุณจะต้องระบุพารามิเตอร์อินพุตเพียงรายการเดียวคือ methodData

การเรียกเก็บเงินของ Play อนุญาตให้ซื้อสินค้าได้ครั้งละ 1 รายการเท่านั้น โดยเซิร์ฟเวอร์ของ Play ทราบราคาและรายละเอียดของสินค้าอยู่แล้ว จึงไม่จำเป็นต้องใช้พารามิเตอร์ details ดูคำอธิบายโดยละเอียดเพิ่มเติมได้ในคำอธิบาย

ใช้สมาชิก supportedMethods ของพารามิเตอร์ methodData ใน PaymentRequest เพื่อระบุ Google Play Billing เป็นวิธีการชำระเงินด้วยสตริง "https://play.google.com/billing" จากนั้นใน data member ให้ส่งรหัสสินค้าเป็น sku

const paymentMethodData = [
  {
    supportedMethods: 'https://play.google.com/billing',
    data: {
      sku: item.itemId,
    },
  },
];

จากนั้นสร้างคำขอการชำระเงินและเรียกใช้ show() เพื่อเริ่มขั้นตอนการชำระเงิน

const request = new PaymentRequest(paymentMethodData);
const paymentResponse = await request.show();

ซึ่งจะแสดง UI การซื้อใน Play ต่อผู้ใช้ โดยผู้ใช้จะเห็นรายละเอียดเกี่ยวกับผลิตภัณฑ์ที่พยายามซื้อ โดยผู้ใช้จะละทิ้งธุรกรรมหรือดำเนินการชำระเงินต่อก็ได้ หากผู้ใช้ยกเลิกการชำระเงิน ระบบจะปฏิเสธ Promise ที่ show() แสดงผลพร้อมข้อผิดพลาด หากผู้ใช้ชำระเงินและทำการซื้อเสร็จสมบูรณ์ ระบบจะดำเนินการตามที่สัญญาไว้ด้วย PaymentResponse ในพร็อพเพอร์ตี้ details ของการตอบกลับการชำระเงิน ระบบจะแสดงโทเค็นการซื้อ

การยืนยันการซื้อและโทเค็นการซื้อในเซิร์ฟเวอร์แบ็กเอนด์เป็นสิ่งสำคัญอย่างยิ่งในการป้องกันการประพฤติมิชอบ นอกจากนี้ คุณควรติดตามผู้ใช้และโทเค็นการซื้อที่เชื่อมโยงกับผู้ใช้ด้วย ดูวิธีใช้การยืนยันในเซิร์ฟเวอร์แบ็กเอนด์

หลังจากตรวจสอบการซื้อแล้ว ให้เรียกใช้ complete() ในการตอบกลับการชำระเงินเพื่อสิ้นสุดขั้นตอนการชำระเงินและปิด UI การเรียกเก็บเงิน นอกจากนี้ คุณยังส่งresultสตริงที่ไม่บังคับเพื่อระบุสถานะของกระบวนการชำระเงินได้ด้วย เบราว์เซอร์จะเป็นผู้กำหนดว่าจะแสดงข้อบ่งชี้ใดๆ เกี่ยวกับผลลัพธ์นี้ต่อผู้ใช้หรือไม่ Chrome ไม่ได้สร้างคิวที่ผู้ใช้มองเห็นได้ ดังนั้นเราขอแนะนำให้คุณแสดงข้อความแสดงข้อผิดพลาดหรือข้อความแสดงความสำเร็จของคุณเองใน PWA

/* Changes were recently made so that the PaymentResponse `details` property returns the purchase token as `purchaseToken` instead of `token`. Note that `token` will be deprecated at some point in the future. To ensure that your app won't be affected by this, make the change to `purchaseToken` in your client code and use the latest version of Bubblewrap (v1.13.5 and later) to update and generate a new app package to upload to the Play Console. */
const { purchaseToken } = paymentResponse.details;

let paymentComplete;
if (validatePurchaseOnBackend(purchaseToken)) {
  paymentComplete = await paymentResponse.complete('success');
  // Let user know their purchase transaction has successfully completed and been verified
} else {
  paymentComplete = await paymentResponse.complete('fail');
  // Let user know their purchase transaction failed to verify
}

การอัปเกรดและดาวน์เกรดการสมัครใช้บริการ

ขั้นตอนการซื้อนี้จะเหมือนกันสำหรับการซื้อทั้งไอเทมที่ซื้อในแอปและการสมัครใช้บริการ อย่างไรก็ตาม สำหรับการสมัครใช้บริการ Google Play มีตัวเลือกการซื้อเพิ่มเติมที่คุณสามารถใช้ได้ ได้แก่ การอัปเกรดและดาวน์เกรด เมื่อสร้าง data สำหรับวิธีการชำระเงิน คุณจะต้องส่งข้อมูลต่อไปนี้เพื่อเริ่มขั้นตอนการอัปเกรดหรือดาวน์เกรด

  • sku: นี่คือรหัสรายการสำหรับการสมัครใช้บริการใหม่ที่จะอัปเกรดหรือดาวน์เกรด
  • oldSku: นี่คือรหัสสินค้าสำหรับการสมัครใช้บริการปัจจุบันของผู้ใช้
  • purchaseToken: นี่คือโทเค็นการซื้อสำหรับการสมัครใช้บริการปัจจุบันของผู้ใช้ ดังที่ได้กล่าวไว้ก่อนหน้านี้ คุณควรติดตามโทเค็นการซื้อในแบ็กเอนด์ และสำหรับสถานการณ์นี้และสถานการณ์อื่นๆ คุณควรเชื่อมโยงผู้ใช้กับการซื้อปัจจุบันและโทเค็นการซื้อด้วย
  • prorationMode: ระบบจะเรียกเก็บเงินสำหรับการสมัครใช้บริการใหม่เมื่อแทนที่การสมัครใช้บริการปัจจุบันของผู้ใช้
โหมดการปันส่วนตามสัดส่วน คำอธิบาย

immediateAndChargeProratedPrice

ระบบจะอัปเกรดการสมัครใช้บริการทันทีและรอบการเรียกเก็บเงินจะยังคงเหมือนเดิม จากนั้นระบบจะเรียกเก็บเงินส่วนต่างของราคาสำหรับระยะเวลาที่เหลือจากผู้ใช้

immediateAndChargeFullPrice

การสมัครใช้บริการได้รับการอัปเกรดหรือดาวน์เกรด และระบบจะเรียกเก็บเงินจากผู้ใช้ในราคาเต็มสำหรับสิทธิ์ใหม่ทันที ระบบจะคิดมูลค่าที่เหลือจากการสมัครใช้บริการก่อนหน้าตามสัดส่วนเวลาสำหรับการสมัครใช้บริการใหม่ เราเพิ่งเพิ่มโหมดการคิดตามสัดส่วนนี้ในการเปิดตัว Google Play Billing Library 4.0 ตอนนี้พร้อมใช้งานผ่าน Bubblewrap แล้วโดยเริ่มตั้งแต่เวอร์ชัน 1.13.5

immediateWithoutProration

ปิดใช้ชั่วคราว โหมดการปันส่วนนี้อาจทำให้เกิดการฉ้อโกงได้ เนื่องจากผู้ใช้อาจได้รับการอัปเกรดการสมัครใช้บริการโดยไม่ต้องชำระเงินเพิ่มเติมสำหรับรอบการเรียกเก็บเงิน 1 รอบ โปรดทราบว่าเราได้ปิดใช้โหมดนี้ชั่วคราวในระหว่างที่เราดำเนินการแก้ไข

immediateWithTimeProration

ระบบจะอัปเกรดหรือดาวน์เกรดการสมัครใช้บริการทันที ระบบจะปรับเวลาที่เหลือตามส่วนต่างของราคา และจะนำไปเครดิตกับการสมัครใช้บริการใหม่โดยเลื่อนวันที่เรียกเก็บเงินครั้งถัดไป นี่คือลักษณะการทำงานเริ่มต้น

เลื่อน

การสมัครใช้บริการจะได้รับการอัปเกรดหรือดาวน์เกรดเมื่อต่ออายุการสมัครใช้บริการเท่านั้น ซึ่งจะมีประโยชน์อย่างยิ่งเมื่อดาวน์เกรด

unknownSubscriptionUpgradeDowngradePolicy

ไม่มีนโยบายที่กำหนด ได้ แต่เราไม่แนะนำวิธีนี้

ดูข้อมูลเพิ่มเติมเกี่ยวกับโหมดการปันส่วนตามสัดส่วนต่างๆ ในเอกสารอ้างอิงของ Google Play Billing Library ดูข้อมูลเพิ่มเติมเกี่ยวกับการอัปเกรดและดาวน์เกรดการสมัครใช้บริการ รวมถึงคำแนะนำเกี่ยวกับโหมดการปันส่วนตามสัดส่วนได้ในเอกสารประกอบสำหรับนักพัฒนาแอป Android

การใช้งานช่องเพิ่มเติมเหล่านี้จะมีลักษณะดังนี้

const paymentMethod = [
  {
    supportedMethods: 'https://play.google.com/billing',
    data: {
      sku: item.itemId,
      oldSku: oldPurchase.itemId,
      purchaseToken: oldPurchase.purchaseToken,
      prorationMode: 'immediateAndChargeProratedPrice',
    },
  },
];

โดย item คือ ItemDetails ของการสมัครใช้บริการใหม่ที่ผู้ใช้พยายามอัปเกรดหรือดาวน์เกรด และ oldPurchase คือ PurchaseDetails ของการสมัครใช้บริการปัจจุบันของผู้ใช้

รับทราบการซื้อ

หลังจากที่ผู้ใช้ซื้อไอเทมแล้ว คุณควรให้สิทธิ์ที่เหมาะสมแก่ผู้ใช้ (สิทธิ์เข้าถึงไอเทมหรือเนื้อหาที่ผู้ใช้เพิ่งซื้อ) จากนั้นรับทราบการซื้อ การรับทราบการซื้อจะช่วยให้ Google Play ทราบว่าคุณได้รับการซื้อและประมวลผลการซื้ออย่างเหมาะสมแล้ว

หมายเหตุ: หากไม่รับทราบการซื้อภายใน 72 ชั่วโมงนับจากเวลาที่ซื้อ ระบบจะคืนเงินให้ผู้ใช้และเพิกถอนการซื้อ โทเค็นการซื้อจะใช้ไม่ได้อีกต่อไป ดังนั้นเมื่อคุณค้นหาการซื้อที่มีอยู่ ระบบจะไม่แสดงการซื้อที่ถูกเพิกถอน ซึ่งจะช่วยให้มั่นใจได้ว่าระบบจะไม่เรียกเก็บเงินจากผู้ใช้อย่างไม่ถูกต้องในกรณีที่เกิดข้อผิดพลาดในเครือข่ายซึ่งทำให้ผู้ใช้ไม่ได้รับสิทธิ์ในไอเทม

คุณควรตอบรับการซื้อจากเซิร์ฟเวอร์แบ็กเอนด์โดยใช้ Google Play Developer API เราขอแนะนำให้ให้สิทธิ์แล้วจึงรับทราบการซื้อพร้อมกันในเซิร์ฟเวอร์แบ็กเอนด์

  1. หลังจากที่ผู้ใช้ทำการซื้อฝั่งไคลเอ็นต์แล้ว ให้ส่งโทเค็นการซื้อและรหัสสินค้าในคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์
  2. ในแบ็กเอนด์ หากต้องการดูรายละเอียดเกี่ยวกับการซื้อเพื่อยืนยัน ให้เรียกใช้
  3. ให้สิทธิ์ที่เหมาะสมในฐานข้อมูลแบ็กเอนด์
  4. จากนั้นยืนยันการซื้อโดยโทรไปที่

ใช้การซื้อ

เมื่อคุณรับทราบการซื้อแล้ว Google Play จะทราบว่าตอนนี้ผู้ใช้เป็นเจ้าของไอเทมดังกล่าวและไม่ควรอนุญาตให้ซื้ออีก หากเป็นไอเทมที่ผู้ใช้ต้องซื้อเพียงครั้งเดียวและจะเป็นเจ้าของตลอดไป (เช่น สกินตัวละครในเกม) แสดงว่าไอเทมนั้นเป็นไอเทมที่ใช้แล้วไม่หมด

หรืออาจเป็นไอเทมที่คุณจำกัดให้ผู้ใช้ใช้ได้ครั้งละ 1 รายการ จากนั้นผู้ใช้จะต้องใช้ไอเทมที่ได้ไปแล้วก่อนจึงจะซื้อไอเทมนี้ได้อีกครั้ง เมื่อผู้ใช้ "ใช้" ไอเทม คุณควรเรียกใช้เมธอด consume() เพื่อให้ Google Play ทราบว่าผู้ใช้ได้ใช้ไอเทมแล้ว จากนั้น Google Play จะทำให้ไอเทมพร้อมให้ผู้ใช้ซื้ออีกครั้ง

สำหรับไอเทมที่คุณอนุญาตให้ผู้ใช้เป็นเจ้าของได้หลายรายการ ผู้ใช้ต้องซื้อไอเทมเหล่านั้นซ้ำได้โดยไม่ต้องใช้ก่อน (เราเรียกไอเทมเหล่านี้ว่าไอเทมที่ซื้อซ้ำได้) ในทำนองเดียวกัน ผู้ใช้จะต้อง "ใช้" ไอเทมเหล่านี้ก่อน Google Play จึงจะอนุญาตให้ผู้ใช้ซื้อไอเทมอีกครั้ง ดังนั้นแม้ว่าผู้ใช้จะยังไม่ได้ใช้ไอเทม คุณก็ต้องเรียกใช้เมธอด consume() เพื่อทำเครื่องหมายไอเทมว่าใช้แล้ว

// After the user purchases the item, send the purchase token and item ID to your backend to grant the entitlement and acknowledge it right away

. . .
// When the user uses the item or if it is a repeatable item, consume it so it’s available for purchase again.
service.consume(purchaseToken);
}

ตรวจสอบการซื้อที่มีอยู่

ขั้นตอนสุดท้ายในเส้นทางของผู้ใช้ที่สำคัญคือการตรวจสอบการซื้อที่มีอยู่ (ไอเทมที่ซื้อในแอปที่ยังไม่ได้ใช้และการสมัครใช้บริการที่กำลังดำเนินอยู่) เพื่อให้ผู้ใช้ทราบว่าปัจจุบันตนเองมีการสมัครใช้บริการหรือไอเทมใดบ้าง การซื้อที่มีอยู่เหล่านี้จะมาจากการซื้อใน Google Play ก่อนหน้านี้ในอุปกรณ์ใดก็ได้ที่ดำเนินการในแอปหรือใน Play Store การซื้อจากภายนอกแอปใน Play Store เรียกว่าการซื้อนอกแอป

เมื่อดึงข้อมูลการซื้อที่มีอยู่ คุณควรตรวจสอบสถานะการรับทราบและรับทราบการซื้อที่ดำเนินการก่อนหน้านี้แต่ไม่ได้รับการรับทราบอย่างถูกต้องด้วย เราขอแนะนำให้รับทราบการซื้อโดยเร็วที่สุดเพื่อให้สิทธิ์ของผู้ใช้เป็นข้อมูลล่าสุดและแสดงในแอปอย่างถูกต้อง

เมธอด listPurchases() ของ Digital Goods API จะแสดงรายการ PurchaseDetails ที่มี itemId และ purchaseToken สำหรับการซื้อแต่ละรายการ คุณจะต้องใช้ Google Play Developer API ในเซิร์ฟเวอร์แบ็กเอนด์เพื่อตรวจสอบสถานะของการซื้อและตอบรับการซื้ออย่างเหมาะสม สิ่งที่คุณควรทำมีดังนี้

  1. เรียกใช้เมธอด listPurchases() ของ Digital Goods API ฝั่งไคลเอ็นต์เพื่อดึงข้อมูลรายการสินค้าที่ผู้ใช้ซื้อ
  2. สำหรับการซื้อแต่ละครั้ง ให้ส่ง purchaseToken และ itemId ไปยังแบ็กเอนด์
  3. หากเหมาะสม ให้ให้สิทธิ์ในฐานข้อมูลแบ็กเอนด์
  4. จากนั้นโทรและตรวจสอบ acknowledgementState
  5. หากค่าเป็น 0 (ยังไม่ได้รับการรับทราบ) ให้โทรหา

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธียืนยันการซื้อในเซิร์ฟเวอร์แบ็กเอนด์ก่อนให้สิทธิ์

ประวัติการสั่งซื้อ

แม้ว่า listPurchases จะแสดงข้อมูลเกี่ยวกับการซื้อที่มีอยู่ของผู้ใช้ แต่วิธี listPurchaseHistory() (ใน API เวอร์ชัน 2.1) จะแสดงการซื้อล่าสุดที่ผู้ใช้ทำสำหรับแต่ละรายการ ไม่ว่าการซื้อจะหมดอายุ ยกเลิก หรือใช้ไปแล้วก็ตาม เมธอด listPurchaseHistory() จะแสดงรายการ PurchaseDetails ที่มี itemId และ purchaseToken สำหรับการซื้อแต่ละครั้ง ซึ่งคุณจะต้องใช้กับ Google Play Developer API ในเซิร์ฟเวอร์แบ็กเอนด์เพื่อดึงข้อมูลเพิ่มเติม

การซื้อนอกแอป

การซื้อนอกแอปคือการซื้อที่ไม่ได้ดำเนินการในขั้นตอนการซื้อในแอปปกติ โดยปกติแล้ว การซื้อเหล่านี้จะเกิดขึ้นใน Play Store แทนที่จะเป็นในแอปของคุณ ซึ่งผู้ใช้สามารถทำการซื้อนอกแอปได้ 2 วิธีหลักๆ ดังนี้

  • การแลกรหัสโปรโมชัน: ในเมนูผู้ใช้ของ Play Store ใน "ข้อเสนอและการแจ้งเตือน" -> "แลกรหัสโปรโมชัน" หรือใน "การชำระเงินและการสมัครใช้บริการ" -> "แลกรหัสของขวัญ"
  • การสมัครใช้บริการอีกครั้ง: ในเมนูผู้ใช้ Play Store ในส่วน"การชำระเงินและการสมัครใช้บริการ" -> "การสมัครใช้บริการ" ผู้ใช้จะจัดการการสมัครใช้บริการทั้งหมดในแอปต่างๆ ได้ที่นี่ สำหรับการสมัครใช้บริการที่หมดอายุหรือถูกยกเลิก ผู้ใช้จะมีตัวเลือกในการ "สมัครอีกครั้ง"

เมื่อผู้ใช้สมัครใช้บริการอีกครั้งจาก Play Store ระบบจะไม่ตอบรับการซื้อโดยอัตโนมัติ ซึ่งอาจส่งผลให้ผู้ใช้ได้รับเงินคืน ลักษณะการทำงานนี้เป็นไปตามที่ตั้งใจไว้ เนื่องจากระบบจะเรียกเก็บเงินค่าสมัครใช้บริการจากผู้ใช้ก็ต่อเมื่อผู้ใช้เปิดแอปเพื่อใช้งานเท่านั้น ผู้ใช้อาจเห็นข้อความ "ยืนยันการสมัครใช้บริการ" ดังนี้ ซึ่งจะช่วยเตือนให้ผู้ใช้เปิดแอป

ระบบจะแจ้งให้ผู้ใช้ยืนยันการสมัครใช้บริการโดยการเปิดแอปเพื่อรับทราบการซื้อ

คุณในฐานะนักพัฒนาแอปมีหน้าที่ต้องใช้การตอบรับเหล่านี้เมื่อผู้ใช้เปิดแอป เราจึงขอแนะนำให้ตรวจสอบการซื้อที่มีอยู่ (โดยปกติเมื่อเปิดแอปเป็นครั้งแรก) และตอบรับการซื้อที่ยังไม่ได้ตอบรับ

อนุญาตให้ผู้ใช้จัดการการสมัครใช้บริการ

การมอบประสบการณ์การใช้งานที่ดีแก่ผู้ใช้เป็นสิ่งสำคัญ ดังนั้นคุณควรมีวิธีให้ผู้ใช้จัดการและยกเลิกการสมัครใช้บริการในแอป เราขอแนะนำให้สร้าง Deep Link ในหน้าการตั้งค่าหรือเมนูที่จะเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าการจัดการการสมัครใช้บริการของแอปใน Play Store แทนที่ URL ต่อไปนี้ด้วย "sub-product-id" และ "app-package-name" ที่เหมาะสม

https://play.google.com/store/account/subscriptions?sku=sub-product-id&package=app-package-name

ขั้นตอนถัดไป

โฟลว์ของผู้ใช้และข้อมูลโค้ดเหล่านี้เป็นการติดตั้งใช้งานพื้นฐานเพื่อแสดงวิธีใช้ Digital Goods API และ Payment Request API ใน PWA เพื่อติดตั้งใช้งาน Google Play Billing คุณควรใช้ API ตามความเหมาะสมในบริบทและกรณีการใช้งานของแอป ดูตัวอย่างการติดตั้งใช้งานแบบครบวงจรได้ในตัวอย่างโอเพนซอร์ส

จากนั้นดูวิธีติดตั้งใช้งานคอมโพเนนต์การเรียกเก็บเงินของ Play ที่สำคัญในเซิร์ฟเวอร์แบ็กเอนด์เพื่อให้แอปปลอดภัยและอัปเดตสิทธิ์ของผู้ใช้เสมอ