Bubblewrap TWA是否支持Google Play Billing订阅基础方案?
解决TWA中Google Play Billing多基础方案调用问题
核心问题定位
你遇到的问题源于TWA的Digital Goods API对Google Play订阅基础方案的调用规则与原生Billing Library存在差异:
- 向后兼容的基础方案可通过原订阅ID(
premium_membership)直接调用,但非兼容基础方案必须用「订阅ID:基础方案ID」的组合格式标识,而非单独使用基础方案ID。 - 你的查询代码使用了基础方案ID而非组合ID,导致返回空列表;调用时因ID格式错误触发支付取消报错。
具体修复步骤
- 修正商品ID格式
所有非向后兼容的基础方案,必须以「订阅ID:基础方案ID」的格式作为商品ID传入API:
const service = await window.getDigitalGoodsService('https://play.google.com/billing'); // 格式规则:订阅ID:基础方案ID const details = await service.getDetails([ 'premium_membership:premium-membership', 'premium_membership:premium-membership-half-yearly', 'premium_membership:premium-membership-yearly' ]); console.log(details); // 此时应返回正确的商品详情列表
- 同步修正PaymentRequest的ID格式
发起支付请求时,同样使用组合ID:
const request = new PaymentRequest( [{ supportedMethods: 'https://play.google.com/billing' }], { total: { label: '会员订阅', amount: { currency: 'CNY', value: '68.00' } }, displayItems: [{ label: '年度会员', amount: { currency: 'CNY', value: '618.00' }, id: 'premium_membership:premium-membership-yearly' // 组合ID }] } );
- 确认android-browser-helper版本
检查build.gradle中android-browser-helper的版本,需确保使用2.5.0及以上版本(该版本完整支持Billing Library 5+的基础方案特性):
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.5.0'
若版本低于2.5.0,直接升级即可,无需额外配置。
- Google Play控制台配置验证
- 确认所有基础方案的「状态」为活跃,且已关联到正确的订阅ID
- 检查测试账号已添加到「许可测试」列表,且订阅项目已启用测试权限
订阅升级/降级实现
修复ID格式后,可通过Digital Goods API的updateSubscription方法实现订阅的升级/降级,无需依赖多个独立订阅:
// 示例:从月度订阅升级到年度订阅 const service = await window.getDigitalGoodsService('https://play.google.com/billing'); await service.updateSubscription( 'premium_membership:premium-membership', // 当前订阅的组合ID 'premium_membership:premium-membership-yearly', // 目标订阅的组合ID 'IMMEDIATE_WITH_TIME_PRORATION' // 计费模式,可按需选择 );
设备环境说明
你的Android 13 + Chrome 116环境完全支持上述特性,需确保TWA已正确签名并上传至Google Play测试渠道(内部测试/封闭测试),未发布的TWA可能存在Billing API权限限制。
内容的提问来源于stack exchange,提问作者Quinten C
相关产品推荐
相关产品推荐

