Android应用内购onPurchasesUpdate()返回历史订阅数据而非最新购买数据
问题原因及解决方案
核心原因:延迟 prorate 模式的订阅生效规则
你使用的deferred proration mode意味着订阅降级不会立即生效,而是等到当前年度订阅周期结束后才会切换到月度订阅。此时你的账户里同时存在两个订阅状态:
- 活跃订阅:仍在有效期的年度订阅,这是当前实际生效的订阅
- 待生效订阅:已购买但未到生效时间的月度订阅
Google Play的onPurchasesUpdated回调默认只会返回当前活跃的订阅数据,不会主动返回待生效的pending订阅,这就是你看到年度订阅数据的原因。
额外触发因素:重复购买同类型待生效订阅
当你再次购买月度订阅时,由于已经存在一个待生效的月度订阅,Google Play会将这次操作视为对现有待生效订阅的确认或更新,而非创建全新的订阅,因此回调依然只会返回当前活跃的年度订阅。
解决方法
要获取到待生效的月度订阅数据,你需要主动调用订阅查询接口:
- 使用
queryPurchasesAsync方法,传入BillingClient.SkuType.SUBS参数,获取用户所有的订阅记录,其中会包含活跃状态和pending状态的订阅 - 通过
Purchase.getPurchaseState()判断订阅状态,Purchase.PURCHASE_STATE_PENDING即为待生效的订阅
内容的提问来源于stack exchange,提问作者Nitish Verma
相关产品推荐
相关产品推荐

