Digital Goods API是专为PWA设计的轻量级接口,用于安全查询和验证已配置的数字商品,不处理支付;仅支持Android上Chrome/Edge 117+等Chromium浏览器,需PWA已安装、HTTPS环境且manifest含"display":"standalone";须检测navigator.digitalGoods可用性;通过getDetails()查SKU详情,用acknowledgePurchase()验证purchaseToken(幂等但仅限未确认token),后端仍需调用Google Play Developer API最终校验。
Digital Goods API(DGA)是专为渐进式 Web 应用(PWA)设计的轻量级接口,用于安全地查询和验证已在应用商店(如 Google Play)中配置的数字商品(包括一次性购买与订阅)。它不处理支付流程本身,而是作为客户端与应用商店后端之间的“凭证校验桥梁”——真正扣款、订阅管理、续订、退款等均由平台(如 Play Billing Library)在原生层完成。
Digital Goods API 目前仅在 Android 上的 Chrome(117+)、Edge(117+)等基于 Chromium 的浏览器中可用,且要求 PWA 已通过 web-app-manifest 安装为“已添加到主屏幕”的应用,并启用 digitalGoods 权限(无需显式申请,但需满足安装状态与 HTTPS 环境)。
manifest.json,包含 "display": "standalone" 或 "minimal-ui"
localhost 也允许调试)navigator.digitalGoods 为 undefined
使用前必须检测 navigator.digitalGoods 是否存在,避免在不支持环境中报错:
if ('digitalGoods' in navigator) { try { const dg = await navigator.digitalGoods.getDigitalGoodsService('play'); // ✅ 可用,继续查询商品 } catch (err) { console.error('Digital Goods 初始化失败:', err.message); }} else { console.warn('Digital Goods API 不可用,请检查是否为已安装的 PWA');}
调用 getDetails() 获取预设商品的本地化标题、描述、价格等——这些信息来自 Google Play 控制台中配置的 SKU:
立即学习“前端免费学习笔记(深入)”;
premium_monthly、one_time_upgrade)price(格式化字符串)、priceCurrency、title、description 和 type("inapp" 或 "subs")示例:
const skus = ['premium_monthly', 'premium_yearly', 'remove_ads'];const details = await dg.getDetails(skus);details.forEach(item => { console.log(`${item.sku}: ${item.title} — ${item.price} (${item.type})`);});
Digital Goods API 本身不发起购买。实际购买需跳转至 Play 商店(通过 getBuyIntent() 或更推荐的方式:调用原生 Android 的 PlayBillingClient),或由 PWA 嵌入的 Capacitor / Cordova 插件触发。购买完成后,你会收到一个 purchaseToken(通常通过 deep link、intent 回传或 service worker 拦截)。
此时用 DGA 验证该 token 是否真实有效:
try { const ack = await dg.acknowledgePurchase({ purchaseToken: 'abc123...xyz', isSubscription: true // 若为订阅,设为 true;一次性购买设 false }); if (ack.acknowledged) { // ✅ 服务器可放心授予权益(如开通会员、解锁功能) }} catch (err) { console.error('确认失败:', err.name); // 如 'InvalidPurchaseTokenError'}
注意:acknowledgePurchase 是幂等操作,但仅对未确认的 token 有效;重复确认会抛出错误。生产中应由后端完成最终验证(通过 Google Play Developer API),DGA 仅作前端快速反馈。