使用RevenueCat沙盒测试时订阅自动取消问题咨询
沙盒环境下RevenueCat订阅自动取消问题排查与咨询
问题描述
在移动应用中使用RevenueCat处理内购业务,Sandbox环境完成支付后,应用内的Pro版本会在几分钟后自动取消,需确认原因。
沙盒设置相关疑问
已在「设置->App Store->沙盒账户->管理」中开启「允许购买和续订(激活)」,并将续订频率设置为3分钟,从截图可见订阅在3分钟后过期,是否为问题诱因?即将上架App Store,担忧正式环境出现同类问题。
订阅状态检查代码
应用首次启动时调用以下代码检查用户购买状态:
func checkSubscribe() { Task { do { let customerInfo = try await Purchases.shared.customerInfo() DispatchQueue.main.async { if customerInfo.entitlements["AI Pro"]?.isActive == true { self.isPro = true } else { self.isPro = false } } } catch { AnalyticsManager.shared.sendEvent(eventName: "error_checkSubscribe", parameters: ["error":error.localizedDescription]) } } }
相关截图
问题原因与解答
沙盒测试机制导致自动过期
你设置的3分钟续订频率是苹果沙盒环境的专属测试配置,目的是让开发者快速验证订阅续订、过期、权限回收等流程,属于正常测试行为。正式环境完全不会受此设置影响,正式环境的订阅周期严格遵循你在App Store Connect中配置的时长,只有用户主动取消、付款失败等正常场景才会导致订阅失效。订阅状态检查逻辑的局限性
当前仅在应用首次启动时调用状态检查,无法实时响应沙盒中订阅过期/续订的状态变化。当沙盒订阅按设置的3分钟周期过期后,customerInfo.entitlements["AI Pro"]?.isActive会变为false,你的代码会将isPro设为false,这是符合逻辑的结果。
优化建议
- 正式环境无需担忧:沙盒的短周期测试机制是苹果提供的工具,正式环境不会自动触发订阅取消,放心上架即可。
- 添加实时状态监听:除启动时检查外,建议通过RevenueCat的代理监听状态变化,实时更新应用内权限:
// 遵循PurchasesDelegate协议 func customerInfoDidUpdate(_ customerInfo: CustomerInfo) { DispatchQueue.main.async { self.isPro = customerInfo.entitlements["AI Pro"]?.isActive == true } } // 初始化时设置代理 Purchases.shared.delegate = self - 调整沙盒测试配置:若需测试长期订阅状态,可在沙盒账户管理中延长续订频率,或使用苹果沙盒默认的订阅周期进行测试。
内容的提问来源于stack exchange,提问作者Ufuk Köşker
相关产品推荐
相关产品推荐




