关于 revenuecat-purchase-flow
用于在 iOS、Android、Kotlin Multiplatform、Flutter 或 React Native 应用中实现 RevenueCat 购买与恢复流程的技能,涵盖获取 offerings、处理取消和错误及恢复购买;不负责付费墙界面或权益门控。
主要功能
- 01获取 offerings 并选择套餐
- 02实现套餐购买
- 03处理取消和购买错误
- 04添加用户主动触发的恢复操作
- 05验证购买与恢复流程
适用场景
- 01将自定义付费墙接入 RevenueCat offerings
- 02避免将用户取消视为错误
- 03在设置页提供购买恢复
- 04测试沙盒购买与恢复流程
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ revenuecat/ ai-toolkit --skill revenuecat-purchase-flow安装后在 Claude Code 中输入/revenuecat-purchase-flow确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
platforms/android.mdflutter.mdios.mdkmp.mdreact-native.md详细介绍
revenuecat-purchase-flow:购买套餐并恢复购买
当用户想完成 RevenueCat 的购买流程时,使用此技能:获取 offerings、调用 purchase、处理取消和错误,并提供“恢复购买”操作。本技能不涉及渲染付费墙 UI(相关内容见 revenuecat-paywall),也不涉及功能门控(相关内容见 revenuecat-entitlements-gate)。
如果应用还没有付费墙,且用户没有要求自定义付费墙,请先确定如何构建付费墙(integrate-revenuecat,第 5c 节)。默认使用 RevenueCat Paywall,由它处理购买本身。
1. 检测平台
检查工作目录,并按以下顺序选择第一个匹配项:
- React Native:
package.json中有react-native-purchases条目,或将react-native作为依赖项 → 阅读platforms/react-native.md。如果expo也是依赖项,请标记为 Expo 项目。 - Flutter:项目根目录下存在
pubspec.yaml→ 阅读platforms/flutter.md。 - Kotlin Multiplatform:
build.gradle.kts包含kotlin { … }多平台 source sets 块,或依赖com.revenuecat.purchases:purchases-kmp*→ 阅读platforms/kmp.md。 - Android(原生):
build.gradle(.kts)应用了com.android.application(且不是 KMP)→ 阅读platforms/android.md。 - iOS(原生):项目根目录下存在
Package.swift、*.xcodeproj、*.xcworkspace或Podfile→ 阅读platforms/ios.md。
如果有多项匹配(例如 Flutter 项目中包含 ios/ 文件夹),请选择最外层的项目,也就是拥有构建配置的项目。如果仍无法确定,请询问用户要配置哪个平台。
2. 通用概念(所有平台)
- 流程。 调用
getOfferings(),从当前 offering 中选取一个Package,再调用purchase(package)。成功完成后,返回的customerInfo已反映此次购买。读取customerInfo.entitlements.active["<id>"]以确认访问权限。 - 用户取消不属于应用错误。 各 SDK 的处理方式有所不同:iOS 会抛出
purchaseCancelledError代码;Android 会抛出带有PurchasesErrorCode.PurchaseCancelledError的PurchasesException;Flutter 会返回带有相同代码的PlatformException;React Native 会设置e.userCancelled === true。此时直接返回,不要显示警告。 - 值得向用户提示的错误。 支付被拒绝、网络错误、商店不可用、收据已被使用。其他错误都应记录下来,并让用户重试。购买实际失败时,绝不要静默地表现为成功。
- 不要在购买回调中解锁内容。 刷新客户信息,并让权益监听器(见
revenuecat-entitlements-gate)更新受门控的 UI。这样可以确保访问权限只有一个事实来源,并避免购买流程与恢复流程之间出现不一致。 restorePurchases()是用户操作,不是自动步骤。 它会向商店请求当前收据,并将其同步到 RevenueCat。请在付费墙和/或设置页面中提供醒目的“恢复购买”按钮。iOS 法律要求必须提供此类按钮。- 一次只允许进行一笔购买。 购买进行期间,请禁用付费墙上的购买按钮,以防重复扣费。
3. 实现
阅读与检测结果匹配的平台文件:
platforms/ios.mdplatforms/android.mdplatforms/kmp.mdplatforms/flutter.mdplatforms/react-native.md
每个平台文件都包含完整的购买函数和恢复函数。
4. 验证
满足以下条件前,不要声称流程正常:
- 当前商品的套餐通过沙盒完成端到端购买,且用户的权益状态变为已激活。
- 取消商店界面不会显示错误提示,也不会让 UI 一直处于加载状态。
- 再次尝试购买同一项有效订阅时,应能妥善处理(StoreKit / Play Billing 会触发
productAlreadyPurchased/receiptAlreadyInUse路径;流程不应崩溃)。 - 在全新安装的应用中登录同一商店账号后,恢复按钮应能恢复权益并更新 UI。
评论
支持 Markdown