游牧周记第47期
标签
Neocloud, Coreweave, Nebius
影视
流人 season 5
这一季还是那么好看,而且变成轻松喜剧了,毕竟上一季有点沉重,算是喘口气的作品。

开发
expo+RevenueCat的促销码问题
用RevenueCat一年半以上了,没想到过测试促销码吗?
我现在才发现这个问题是因为有老用户提出。
后来找遍网络都没人提及,官方似乎也很模糊(回去再看看docs)。
AI多数含混不清,只有kimi板上钉钉地说没有解决方案。
太奇葩了,这么牛的平台居然不支持。
其实兑换成功后,dashboard上确实看到了这笔交易,说明rc能正常读取的,只是app端如何解决似乎无办法?
以前我用的https://github.com/hyochan/react-native-iap也非常简单就搞定了啊,几乎无感的设计,于是我又去看了看,这个组件还在不断更新中,可能哪天我要回归?
附上kimi的回答,我现在非常欣赏它。
把 docs.revenuecat.com 全站翻了一遍,结论可以一句话先说完:
RevenueCat 2025 年依旧「看不到」任何通过 App Store 手动兑换的 Promo Code(一次性内购那 100 个码)。
官方只支持「订阅类 Offer Codes」,而它们跟 Promo Code 完全是两套东西。下面把散落在各文档/社区帖里的关键信息按话题汇总,给你一份「官方拼图」。
1. Promo Code(消费类)在 RevenueCat 里的真实表现
- 交易会被 当成原价购买 写进 Charts & CustomerInfo,价格、take-home 比例都不变,没有任何字段标记它是 promo。
- 仪表盘里
offer_code = null就表明 不是 Offer Code;Promo Code 不会出现在这里。 - 苹果/Google 的 API 不会把「用了 promo code」这件事告诉 RevenueCat,所以 SDK、webhook、ETL 全程都 无法区分。
- 官方在 iOS Subscription Offers 文档里直接把「In-App Purchase Promo Codes」列为 ⚠️ Not recommended,理由:
– 只能 100 个/6 个月
– 不能商用
– Revenue 不准
– 不支持presentCodeRedemptionSheet。
2. 订阅侧 Offer Codes ≠ Promo Code
- Offer Codes 必须先在 App Store Connect 建「订阅优惠」,再在 RevenueCat Dashboard 绑定同一个 Subscription Price ID;
消费类 IAP 没有 Price ID,走不通这套流程。 - 用户用 Offer Code 兑换后,RevenueCat 会把首笔交易记成 $0,
offer_code字段会写进 CustomerInfo & webhook;续费按正常价格追踪——这些福利只对订阅生效。
3. 社区反复出现的「我该怎么追踪 Promo Code 用户?」
- 官方员工统一答复:
– 追踪不了;
– 真想归因,只能自己维护「码-用户」映射,然后 Granted Entitlements 发奖。 - 有人尝试用 App Store Connect 里看到的「Subscriber ID」去撞 RevenueCat
original_app_user_id,发现 两边 ID 对不上,完全无法关联。
4. 官方给出的可行替代方案
| 方案 | 是否支持消费类 | RevenueCat 能否识别 | 备注 |
|---|---|---|---|
| ① 原生 Promo Code | ✅ | ❌ | 100/6 个月,Revenue 不准,不推荐 |
| ② Offer Codes | ❌(仅订阅) | ✅ | 需订阅产品 + Price ID |
| ③ Granted Entitlements | ✅ | ✅ | 自建码系统,调用 /promotional API 发奖 |
| ④ 后端直接解锁内容 | ✅ | ❌ | 不走商店,不走 RevenueCat,需自记账 |
5. 结论与行动指南
- 如果你做的是一次性内购(金币、解锁关卡等),放弃用苹果原生 Promo Code 做归因——RevenueCat 2025 年依旧拿不到任何标志位。
- 想让 RevenueCat 图表、CustomerInfo、webhook 都能区分「促销用户」,只能自建兑换系统:
– 前端输入码 → 后端验证 → 调用 RevenueCat Granted Entitlements API 发权益;
– 权益事件会带store=PROMOTIONAL,方便后续分析。 - 若坚持要用原生 Promo Code,也请务必在后台 手动维护「已发码名单」,用户进 App 后通过
syncPurchases()把交易拉下来,再靠自己映射发奖,RevenueCat 侧仍显示原价。
再看perplexity的回答:
Revenurecat 2025最新版确实支持苹果的Promo Codes(优惠码)功能,特别是通过Apple的Offer Codes(优惠码)实现定制化的促销和试用。根据RevenueCat的官方文档,Promo Codes可以在App Store Connect中配置,用户可以通过这些优惠码获得折扣或试用期,支持在应用内直接兑换 。revenuecat
支持情况
-
优惠码配置:可以在App Store Connect中预先创建,并通过RevenueCat的Customer Center自动展示和应用 。revenuecat+1
-
兑换方式:用户可以通过苹果提供的兑换页面(包括在应用内弹出兑换页面或跳转到App Store)完成Promo Code的兑换 。revenuecat
-
内购设计:建议在设计时,利用Apple的Offer Codes实现针对特定用户群或优惠的个性化促销,确保符合苹果的政策,并可以通过RevenueCat自动管理订阅状态。revenuecat+1
设计建议
-
促销码的申请:在苹果商店后台通过App Store Connect配置优惠码(Offer Codes)。
-
应用内兑换流程:
-
通过
Purchases.shared.presentCodeRedemptionSheet()弹出兑换 界面(建议在用户操作需要兑换时调用), -
或者跳转到苹果的兑换链接(
https://apps.apple.com/redeem?)让用户在Safari或App Store应用中完成兑换。revenuecat
-
-
配合RevenueCat自动匹配:兑换成功后,RevenueCat会自动检测到新交易,并同步用户的订阅状态。revenuecat
关于主要消费类内购
-
如果是订阅类的内购,建议在设置时使用苹果的Offer Codes形成优惠策略,结合RevenueCat的自动订阅管理,确保优惠和促销体验流畅。
-
设计过程中,应确保Promo Codes的创建、兑换流程符合苹果政策,避免因违规操作被拒 。revenuecat
总体而言,Revenurecat 2025支持苹果Promo Codes,设计上需在苹果后台配置优惠码,在App中引导用户兑换,利用RevenueCat自动同步订阅信息,实现无缝体验。
总而言之,revenuecat好好做它的订阅简化工作就行,普通的消费类产品,就用react-native-iap去玩。下一个版本我准备这样改。
