使用Android Kotlin计费示例代码时queryPurchasesAsync编译错误排查
问题排查与解决
核心原因
你遇到的问题大概率是Play Billing库版本不一致,或者项目里没引入示例中封装的协程扩展函数。示例里的queryPurchasesAsync被封装成了挂起函数的扩展,而你的项目直接调用的是官方库原生的回调版本,所以才会要求传第二个参数,且suspend关键字被标记冗余。
解决步骤
对齐库版本
确认项目根目录的build.gradle(或build.gradle.kts)里,Play Billing库的版本和示例项目完全一致,并且要使用带Kotlin扩展的billing-ktx依赖。比如示例用的是6.0.0的话,同步成:dependencies { implementation "com.android.billingclient:billing-ktx:6.0.0" }手动封装协程扩展(如果版本对齐后仍有问题)
如果示例里的协程扩展是自定义的,你可以自己实现一个,把原生的回调式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冗余的提示了。检查协程作用域
一定要确保调用代码是在合法的协程作用域内执行的,不能直接在非协程函数里调用挂起函数。
内容的提问来源于stack exchange,提问作者Tamir
相关产品推荐
相关产品推荐

