如何用Kotlin通过RevenueCat v6.0.0实现支付?无法获取aPackage变量
在RevenueCat v6.0.0中获取Package并发起支付
要获取对应产品IDmonthly_sub的aPackage变量,你需要先从RevenueCat拉取产品/套餐数据,再匹配目标产品,具体实现如下:
1. 通过Offerings获取(推荐方案)
Offerings是RevenueCat用来管理套餐组合的核心机制,优先通过它获取Package:
Purchases.sharedInstance.getOfferingsWith { offerings, error -> if (error != null) { // 处理Offerings获取失败的情况 return@getOfferingsWith } // 获取当前生效的默认Offering(也可指定特定Offering ID) val currentOffering = offerings?.current // 从Offering的可用套餐中匹配目标产品ID val aPackage = currentOffering?.availablePackages?.find { it.product.productId == "monthly_sub" } aPackage?.let { pkg -> // 发起支付请求 Purchases.sharedInstance.purchaseWith( PurchaseParams.Builder(this, pkg).build(), onError = { error, userCancelled -> if (userCancelled) { // 用户主动取消支付 } else { // 处理支付错误,比如网络问题、产品未上架等 } }, onSuccess = { _, customerInfo -> if (customerInfo.entitlements["my_entitlement_identifier"]?.isActive == true) { // 解锁Pro内容 } } ) } ?: run { // 未找到对应产品的Package,需检查产品配置是否正确 } }
2. 直接获取Products(简化方案)
若无需通过Offerings管理套餐,可直接拉取指定产品ID的Product,再提取Package:
val targetProductIds = listOf("monthly_sub") Purchases.sharedInstance.getProducts(targetProductIds) { products, error -> if (error != null) { // 处理产品获取失败的情况 return@getProducts } // 找到目标产品 val targetProduct = products?.firstOrNull { it.productId == "monthly_sub" } // 提取产品对应的首个Package(每个产品至少有一个默认套餐) val aPackage = targetProduct?.availablePackages?.firstOrNull() aPackage?.let { pkg -> // 发起支付,逻辑同上方purchaseWith代码 Purchases.sharedInstance.purchaseWith( PurchaseParams.Builder(this, pkg).build(), onError = { error, userCancelled -> /* 错误处理 */ }, onSuccess = { _, customerInfo -> if (customerInfo.entitlements["my_entitlement_identifier"]?.isActive == true) { // 解锁付费内容 } } ) } ?: run { // 未找到目标产品或对应Package } }
注意事项
- 必须确保
monthly_sub产品ID在RevenueCat控制台和Google Play开发者后台完全一致,且已正确上架 availablePackages包含该产品的所有套餐选项(如月度、年度、促销套餐等),可根据业务需求选择对应套餐getOfferingsWith和getProducts均为异步方法,所有后续支付逻辑必须在回调内执行,避免空指针或时序问题
内容的提问来源于stack exchange,提问作者Muhammad Aziz
相关产品推荐
相关产品推荐

