Digital Goods API(TWA 中的 Play Billing)
发布于 更新于
Digital Goods API 让 Web 应用查询 SKU 详情,并检查来自商店的购买记录或权益,
与 Payment Request API 配合使用。根据 Chrome for Developers 的说明,
window.getDigitalGoodsService 目前仅在 PWA 运行于 Trusted Web Activity(TWA)中
时由 Chrome 支持。
根据 Chrome 指南的说明,当 PWA 运行于 Chrome 的 TWA 中、且后端为 Google
Play Billing 服务商时,该 API 可用。该 explainer 将此方法描述为一个通用的、与
服务商无关的提案——getDigitalGoodsService() 可以接受任意服务商 URL——本页记录的
是 Chrome 指南所覆盖的 Chrome-TWA 配合 Play Billing 这一集成方案。
const service = await window.getDigitalGoodsService('https://play.google.com/billing');const itemDetails = await service.getDetails(['premium_upgrade']);const purchases = await service.listPurchases();根据该 explainer 的说明,listPurchases()“允许客户端获取用户当前拥有或已购买的
物品列表”。它返回的物品 ID 与购买令牌“应当在授予权益之前,通过与服务商之间的直接
API 进行验证”。
运行时检测与回退
Section titled “运行时检测与回退”在调用之前先检测 getDigitalGoodsService 是否存在,并在其不可用或所请求的服务商
无法访问时回退到网页结账:
async function getStoreService() { if (!('getDigitalGoodsService' in window)) { // 未运行在支持 Play Billing 的 TWA 中——改为提供网页结账。 return null; } try { return await window.getDigitalGoodsService('https://play.google.com/billing'); } catch { // 根据该 explainer 的说明,当所请求的服务商不可用时该 promise 会被拒绝—— // 回退到网页结账。 return null; }}- 根据 Chrome 指南的说明,
window.getDigitalGoodsService目前仅在 PWA 运行于 TWA 中时受支持——调用前请先用'getDigitalGoodsService' in window进行特性检测。 - 根据该 explainer 的说明,当“不存在与所给服务商对应的 Digital Goods Service”时该 promise 会被拒绝——根据 Chrome 指南的说明,这也包括 Google Play Billing 本身不可用的情况,而不仅限于未运行在 TWA 中,因此应把拒绝视为需要 回退的信号,而不是证明具体原因的证据。
- 根据 Chrome 指南的说明,作为 Bubblewrap 项目基础的一部分,需要正确配置 Digital
Asset Links;而 Play Billing 本身则是通过在
twa-manifest.json中单独开启 Bubblewrap 的playBilling与alphaDependencies设置来启用的。 - 根据该 explainer 与 Chrome 指南的说明,应通过与服务商之间的直接 API 验证
listPurchases()返回的购买令牌,并在后端确认(acknowledge)购买——根据 Chrome 指南的说明,如果购买未被确认,“三天后用户将获得退款,且 Google Play 会撤销该 购买”。
- Payment Request API —— Digital Goods API 所配合的浏览器中介结账流程。
- Web Share API