Android Kotlin Billing库4.0.0中purchase.sku找不到问题求助
解决Billing Library 4.0.0中purchase.sku找不到的问题
问题根源
Google Play Billing Library 4.0.0版本开始,Purchase类的**sku字段被官方移除**,取而代之的是skus集合(因为单笔订单可能包含多个SKU,比如订阅升级/降级场景),所以直接访问purchase.sku会编译报错。
修复方案
把代码中所有的purchase.sku替换为purchase.skus.firstOrNull()(如果你的业务场景中每个订单只会对应一个SKU,也可以用purchase.skus.first(),但建议用firstOrNull()做空安全处理)。
修改后的完整代码示例:
GlobalScope.launch { subsList.forEach { purchase -> val purchaseSku = purchase.skus.firstOrNull() when (purchaseSku) { SKU_RIFE_MONTHLY, SKU_RIFE_YEARLY_FLASHSALE, SKU_RIFE_ADVANCED_MONTHLY, SKU_RIFE_ADVANCED_YEAR_FLASHSALE, SKU_RIFE_HIGHER_MONTHLY, SKU_RIFE_HIGHER_ANNUAL_FLASH_SALE, QUANTUM_TIER_SUBS_MONTH, QUANTUM_TIER_SUBS_ANNUAL -> { albumDao.setNewUnlockedByTierId(true, NewPurchaseActivity.QUANTUM_TIER_ID) } HIGHER_QUANTUM_TIER_INAPP_WELLNESS_I.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_WELLNESS_I.categoryId) } HIGHER_QUANTUM_TIER_INAPP_WELLNESS_II.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_WELLNESS_II.categoryId) } HIGHER_QUANTUM_TIER_INAPP_WELLNESS_III.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_WELLNESS_III.categoryId) } HIGHER_QUANTUM_TIER_INAPP_LIFE_FORCE.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_LIFE_FORCE.categoryId) } HIGHER_QUANTUM_TIER_INAPP_ABUNDANCE_LUCK.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_ABUNDANCE_LUCK.categoryId) } HIGHER_QUANTUM_TIER_INAPP_ABUNDANCE_SUCCESS.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_ABUNDANCE_SUCCESS.categoryId) } HIGHER_QUANTUM_TIER_INAPP_ABUNDANCE_HAPPINESS.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_ABUNDANCE_HAPPINESS.categoryId) } HIGHER_QUANTUM_TIER_INAPP_ABUNDANCE_LOVE.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_ABUNDANCE_LOVE.categoryId) } HIGHER_QUANTUM_TIER_INAPP_BRAIN.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_BRAIN.categoryId) } HIGHER_QUANTUM_TIER_INAPP_WISDOM.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_WISDOM.categoryId) } HIGHER_QUANTUM_TIER_INAPP_MANIFESTING.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_MANIFESTING.categoryId) } HIGHER_QUANTUM_TIER_INAPP_TRANSFORMATION_MEDITATION.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_TRANSFORMATION_MEDITATION.categoryId) } HIGHER_QUANTUM_TIER_INAPP_PROTECTION.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_PROTECTION.categoryId) } HIGHER_QUANTUM_TIER_INAPP_BEAUTY_I.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_BEAUTY_I.categoryId) } HIGHER_QUANTUM_TIER_INAPP_BEAUTY_II.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_BEAUTY_II.categoryId) } HIGHER_QUANTUM_TIER_INAPP_SKIN_CARE.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_SKIN_CARE.categoryId) } HIGHER_QUANTUM_TIER_INAPP_FITNESS.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_FITNESS.categoryId) } HIGHER_QUANTUM_TIER_INAPP_DMT.sku -> { //albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_DMT.Id) albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_DMT.categoryId) } HIGHER_QUANTUM_TIER_INAPP_AYAHUASCA.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_AYAHUASCA.categoryId) } HIGHER_QUANTUM_TIER_INAPP_NAD.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_NAD.categoryId) } HIGHER_QUANTUM_TIER_INAPP_NMN.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_NMN.categoryId) } HIGHER_QUANTUM_TIER_INAPP_DIGITAL_IVM.sku -> { albumDao.setNewUnlockedByCategoryId(true, HIGHER_QUANTUM_TIER_INAPP_DIGITAL_IVM.categoryId) } } } }
额外注意事项
- 如果你的业务存在单订单多SKU的场景(比如订阅套餐升级),不要直接取第一个SKU,应该遍历
purchase.skus集合,逐个处理每个SKU对应的解锁逻辑。 - 确保项目中导入的是Billing Library 4.0.0及以上版本的
com.android.billingclient.api.Purchase类,避免混淆或旧版本类的引用。
内容的提问来源于stack exchange,提问作者Adil Saiyad
相关产品推荐
相关产品推荐

