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)在原生层完成。
前提条件:PWA 必须运行在受支持环境
Digital Goods API 目前仅在 Android 上的 Chrome(117+)、Edge(117+)等基于 Chromium 的浏览器中可用,且要求 PWA 已通过 web-app-manifest 安装为“已添加到主屏幕”的应用,并启用 digitalGoods 权限(无需显式申请,但需满足安装状态与 HTTPS 环境)。
- 确保你的 PWA 使用了有效的
manifest.json,包含"display": "standalone"或"minimal-ui" - 服务必须通过 HTTPS 提供(本地
localhost也允许调试) - 用户需已将应用“添加到主屏幕”,否则
navigator.digitalGoods为undefined
初始化并检查 API 可用性
使用前必须检测 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:
- SKU 名称需与 Play 控制台完全一致(如
premium_monthly、one_time_upgrade) - 返回结果包含
price(格式化字符串)、priceCurrency、title、description和type("inapp"或"subs") - 一次最多可查 100 个 SKU;建议按需批量请求,而非全量拉取
示例:
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})`);
});
处理购买与订阅确认(关键:验证 purchaseToken)
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 仅作前端快速反馈。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











