前端开发
用 RevenueCat…
在 iOS、Android、KMP、Flutter 或 React Native 应用中,根据 RevenueCat 的 active entitlement 决定显示或隐藏付费功能。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
用 RevenueCat 权益判断是否对特定
解决思路
- 先检测平台:检查工作目录,从上到下取第一个匹配项。1) React Native:package.json 中有 react-native-purchases 条目,或有 react-native 依赖 → 读 platforms/react-native.md;若同时有 expo 依赖,标记为 Expo 项目。2) Flutter:项目根目录存在 pubspec.yaml → 读 platforms/flutter.md。3) Kotlin Multiplatform:build.gradle.kts 含 kotlin { … } 多平台 source sets 块,或依赖 com.revenuecat.purchases:purchases-kmp* → 读 platforms/kmp.md。4) Android 原生:build.gradle(.kts) 应用了 com.android.application 且不是 KMP → 读 platforms/android.md。5) iOS 原生:项目根目录有 Package.swift、*.xcodeproj、*.xcworkspace 或 Podfile → 读 platforms/ios.md。若多个匹配(如 Flutter 项目里的 ios/ 目录),选拥有构建的最外层项目;仍不确定时询问用户要配置哪个平台。
- 检查 entitlement identifier,而不是 product ID。identifier(例如 "premium")在 RevenueCat dashboard 中配置并映射到一个或多个产品;使用 entitlement 可以在不改动应用代码的情况下更换产品、价格和商店。
- 以 customerInfo.entitlements.active 为唯一依据。它是按 entitlement identifier 索引的 Map<String, EntitlementInfo>;存在于 active 中表示用户当前有访问权,不存在则表示没有,无论过去是否购买过。
- 不要基于购买历史做门控。已过期的订阅仍会出现在 customerInfo.entitlements.all 中,但会从 active 中消失;只用 active。
- 先获取一次,再订阅监听。首次 customerInfo 调用会快速返回缓存值,SDK 随后在后台刷新;每个 SDK 都暴露 listener 或 stream,在权益变化时(购买、恢复、续订或过期后)触发。订阅它,而不是轮询。
- 确保 SDK 已先配置。如果 Purchases.configure(…) 尚未运行,权益调用会失败;在使用本技能前先通过 integrate-revenuecat 配置好 SDK。
- 按检测结果读取对应平台文件:platforms/ios.md、platforms/android.md、platforms/kmp.md、platforms/flutter.md、platforms/react-native.md。每个平台文件展示一次性检查、响应式订阅,以及在典型应用中各自放置的位置。
- 验证前不要声称门控可用:1) 有 active entitlement 的用户能看到受门控功能,没有的用户看不到。2) 当权益状态变化时(用 sandbox 购买或 dashboard 手动授予测试),UI 无需手动重启即可更新,确认 listener 已接好。3) 代码中的 entitlement identifier 与 RevenueCat dashboard 中存在的 identifier 匹配;这里的拼写错误会静默地把所有人挡在外面。
适用边界 · 注意事项
- 不涉及购买流程(应使用 revenuecat-purchase-flow)
- 不涉及用户认证(应使用 revenuecat-identify-user)
- SDK 尚未通过 Purchases.configure(…) 配置时不可用