迁移至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
相关产品推荐
相关产品推荐

