使用Google Play Billing库收到PURCHASES_UPDATED广播报错如何解决
关于PURCHASES_UPDATED广播运行时异常的解决方案
广播来源说明
com.android.vending.billing.PURCHASES_UPDATED是Google Play官方的购买状态更新广播,无需开发者手动注册,由你集成的Google Play Billing库内部自动完成注册、接收逻辑,你报错日志里的com.android.billingclient.api.zzg就是Billing库内部的广播接收器实现类,所以官方集成文档中不会提到手动注册该广播的相关步骤。
异常触发的常见原因
- Billing库版本过旧,存在内部兼容bug,尤其是4.0及以下的旧版本,在Android 11及以上系统设备上高频触发该类广播接收异常
- 你实现的
PurchasesUpdatedListener回调逻辑中存在未捕获的异常,接收器接收到广播后执行回调代码崩溃,向上抛出该运行时异常 - 回调逻辑中存在耗时操作,或者引用了已经销毁的上下文、页面实例等资源,当应用在后台接收到广播时直接触发崩溃
- Google Play商店推送的广播携带异常参数,旧版本Billing库未做格式兼容,处理时直接崩溃
修复方案
- 首先将Google Play Billing库升级至最新稳定版,官方已在5.0及以上版本修复了多个广播处理相关的内部bug,可直接解决大部分兼容类异常
- 给
PurchasesUpdatedListener的所有执行逻辑增加try-catch全局兜底,捕获所有可能的异常,避免未捕获异常向上抛出触发广播接收崩溃 - 回调逻辑中不要执行耗时操作,所有UI更新、业务逻辑执行前先校验当前应用、页面的存活状态,避免引用已销毁的资源
- 主动降低对广播的依赖,在应用启动、付费页面恢复时主动调用
queryPurchasesAsync()接口拉取最新的购买状态,即使广播处理异常也不会出现漏单问题
内容的提问来源于stack exchange,提问作者Pavel Poley
相关产品推荐
相关产品推荐

