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

迁移至Google Billing Library 6后无法在queryProductDetailsAsync中获取sku

解决Google Billing Library 6迁移中无法获取SKU和价格的问题

Billing Library 6.x彻底替换了旧版的SkuDetails,改用ProductDetails类承载产品信息,所以你原来调用的sku和price属性已不存在,得用新API获取对应数据:

修改后的代码

private fun querySkuDetails() {
    val productList = listOf(
        QueryProductDetailsParams.Product.newBuilder()
            .setProductId(PRODUCT_ID)
            .setProductType(BillingClient.ProductType.INAPP)
            .build()
    )

    val params = QueryProductDetailsParams.newBuilder().setProductList(productList).build()

    billingClient?.queryProductDetailsAsync(params) { billingResult, productDetailsList ->
        if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
            for (productDetails in productDetailsList) {
                // 替代原sku的是productId
                val productId = productDetails.productId
                if (PRODUCT_ID == productId) {
                    // 一次性内购的价格在oneTimePurchaseOfferDetails里
                    productDetails.oneTimePurchaseOfferDetails?.let { offerDetails ->
                        val price = offerDetails.formattedPrice
                        priceFromBillingManager = price
                    }
                }
            }
        }
    }
}

关键说明

  • 原sku对应ProductDetails.productId,直接调用即可拿到产品ID。
  • 价格信息不再是ProductDetails的直接属性:
    • 一次性内购(INAPP类型):价格在oneTimePurchaseOfferDetails.formattedPrice里,注意这个对象可能为空,必须做判空处理。
    • 订阅产品:价格在subscriptionOfferDetails列表中,每个元素对应一个订阅套餐的价格信息,需根据业务需求选择对应套餐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:50:01