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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:13:35