Google Billing Library调用queryPurchasesAsync无法返回已取消订阅资源问题
已取消订阅无法通过queryPurchasesAsync获取的原因
queryPurchasesAsync()的官方设计逻辑就是仅返回当前处于有效状态的购买记录,包含未过期的正常订阅、处于宽限期/账户保留期的异常订阅,已取消且已过期的订阅默认不会被该接口返回,属于预期行为。- 测试环境下的订阅过期后被从该接口移除的速度比正式环境更快,通常取消后到下一个续费周期节点就会被清除出返回结果。
获取已取消订阅记录的解决方案
- 客户端侧改用
queryPurchaseHistoryAsync()接口查询
该接口专门用于拉取当前应用下当前账号的所有历史购买记录,覆盖已取消、已过期的订阅资源,返回结果中包含完整的IsAutorenewing、过期时间、取消时间等字段,可满足你的读取需求。
注意调用时需要指定正确的Sku类型为订阅类
BillingClient.SkuType.SUBS,不要和消耗型商品的查询类型混淆。
服务端对接Google Play Developer API校验
生产环境下推荐优先使用服务端调用purchases.subscriptions.get接口,传入订阅的购买token即可拉取到全生命周期的订阅数据,无论订阅处于有效、取消、过期状态都能返回完整信息,同时可以避免客户端数据被篡改的风险,是最可靠的状态校验方案。测试阶段的快速验证方案
如果你目前处于集成测试阶段,可直接登录测试账号的Google Play订阅管理页,或者在Google Play Console的订单管理板块查找对应测试订阅的完整状态,也可以手动调整测试订阅的续费、过期状态验证你的业务逻辑。
内容的提问来源于stack exchange,提问作者Kamal
相关产品推荐
相关产品推荐

