RevenueCat vs Adapty
iOS + Android 订阅管理 SaaS 大比拼——RevenueCat(市场领导者)对决 Adapty(专注 Paywall + A/B 测试)。功能对等性、定价、集成方式全面剖析。
以 SDK + 后端服务的形式,租用多商店订阅基础设施
Apple 的第一方框架,但服务器端需要你自己实现
门槛很明确:如果月度跟踪收入(MTR)低于 $2,500,RevenueCat 实际上是免费的——这时你比较的不是 1% 的费用,而是零成本,自建基础设施在这种情况下总是更贵。只在 App Store 销售、产品单一、对数据合规(KVKK)敏感的产品,纯 StoreKit 2 方案是站得住脚的。如果是多商店场景,把 RTDN 的 18 种通知类型和 App Store V2 通知并行同步维护起来成本很高;按一个粗略的经验法则,当 MTR 达到 $50,000+ 时,应该重新权衡这个决定。
| 分类 | RevenueCat | StoreKit 2 (kendi altyapın) |
|---|---|---|
| 性能 | 8/10 | 8/10 |
| 学习难易度 | 8/10 | 5/10 |
| 生态系统 | 8/10 | 6/10 |
| 社区 | 6/10 | 5/10 |
| 就业市场 | 5/10 | 6/10 |
| 面向未来 | 8/10 | 8/10 |
// RevenueCat - 权益检查与购买(iOS SDK 5.x)
import RevenueCat
func configureRevenueCat() {
Purchases.logLevel = .debug
Purchases.configure(withAPIKey: "appl_XXXXXXXXXXXX")
}
func unlockProIfEntitled() async {
do {
let customerInfo = try await Purchases.shared.customerInfo()
if customerInfo.entitlements["pro"]?.isActive == true {
print("Pro 权益已激活")
}
} catch {
print("customerInfo 错误:\(error)")
}
}
func purchasePro() async {
do {
let offerings = try await Purchases.shared.offerings()
guard let package = offerings.current?.availablePackages.first else { return }
let result = try await Purchases.shared.purchase(package: package)
if result.customerInfo.entitlements["pro"]?.isActive == true {
print("购买成功,pro 已激活")
}
} catch {
print("购买失败:\(error)")
}
}// StoreKit 2 - 监听 Transaction 与权益检查(自建基础设施)
import StoreKit
func listenForTransactions() -> Task<Void, Error> {
Task.detached {
for await result in Transaction.updates {
switch result {
case .verified(let transaction):
await grantEntitlement(for: transaction)
await transaction.finish()
case .unverified(_, let error):
print("验证失败:\(error)")
}
}
}
}
func checkCurrentEntitlement() async -> Bool {
for await result in Transaction.currentEntitlements {
guard case .verified(let transaction) = result else { continue }
if transaction.productID == "pro_monthly" {
return true
}
}
return false
}
func purchase(product: Product) async throws {
let result = try await product.purchase()
switch result {
case .success(let verification):
guard case .verified(let transaction) = verification else { return }
await grantEntitlement(for: transaction)
await transaction.finish()
case .userCancelled, .pending:
break
@unknown default:
break
}
}
func grantEntitlement(for transaction: Transaction) async {
// 将 JWS 发送到服务器,通过 App Store Server API 进行交叉验证
}门槛很明确:如果月度跟踪收入(MTR)低于 $2,500,RevenueCat 实际上是免费的——这时你比较的不是 1% 的费用,而是零成本,自建基础设施在这种情况下总是更贵。只在 App Store 销售、产品单一、对数据合规(KVKK)敏感的产品,纯 StoreKit 2 方案是站得住脚的。如果是多商店场景,把 RTDN 的 18 种通知类型和 App Store V2 通知并行同步维护起来成本很高;按一个粗略的经验法则,当 MTR 达到 $50,000+ 时,应该重新权衡这个决定。
获取免费咨询如果月度跟踪收入(MTR)低于 $2,500,RevenueCat 实际上是免费的,并且会承担多商店服务器端验证、webhook、退款管理等工作——这种情况下通常选择 RevenueCat 更合理。对于单一平台、产品简单、不希望把收入数据交给第三方的应用,纯 StoreKit 2 是一个站得住脚的选择。对于多商店、处于增长期的产品,自建基础设施通常成本更高。