You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Android Kotlin计费示例代码时queryPurchasesAsync编译错误排查

问题排查与解决

核心原因

你遇到的问题大概率是Play Billing库版本不一致,或者项目里没引入示例中封装的协程扩展函数。示例里的queryPurchasesAsync被封装成了挂起函数的扩展,而你的项目直接调用的是官方库原生的回调版本,所以才会要求传第二个参数,且suspend关键字被标记冗余。

解决步骤

  1. 对齐库版本
    确认项目根目录的build.gradle(或build.gradle.kts)里,Play Billing库的版本和示例项目完全一致,并且要使用带Kotlin扩展的billing-ktx依赖。比如示例用的是6.0.0的话,同步成:

    dependencies {
        implementation "com.android.billingclient:billing-ktx:6.0.0"
    }
    
  2. 手动封装协程扩展(如果版本对齐后仍有问题)
    如果示例里的协程扩展是自定义的,你可以自己实现一个,把原生的回调式queryPurchasesAsync转成挂起函数:

    suspend fun BillingClient.queryPurchasesSkuAsync(skuType: String): Purchase.PurchasesResult {
        return suspendCoroutine { continuation ->
            this.queryPurchasesAsync(skuType) { billingResult, purchases ->
                continuation.resume(Purchase.PurchasesResult(billingResult, purchases))
            }
        }
    }
    

    之后在协程作用域(比如viewModelScope、lifecycleScope)里调用这个自定义的queryPurchasesSkuAsync,就不用传回调参数,也不会有suspend冗余的提示了。

  3. 检查协程作用域
    一定要确保调用代码是在合法的协程作用域内执行的,不能直接在非协程函数里调用挂起函数。

内容的提问来源于stack exchange,提问作者Tamir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:39:20