重装应用后In-App Purchases丢失?如何绑定固定ID追踪用户内购
解决无需注册下的跨设备/重装内购追踪问题
iOS 端方案:依赖 Apple App Store 原生验证
- 直接调用 StoreKit 的
SKReceiptRefreshRequest获取用户交易收据,通过苹果服务器验证收据合法性,无需依赖设备ID。苹果会将购买记录绑定到用户的 Apple ID,只要用户登录同一个 Apple ID,重装后重新验证收据就能恢复购买状态。 - 实现要点:
- 每次启动应用时,检查本地是否有有效收据,若无则发起刷新请求。
- 解析验证后的收据,提取所有有效内购项目(包括订阅和一次性购买),标记用户的已购状态。
- Testflight 环境下,使用沙盒验证地址
https://sandbox.itunes.apple.com/verifyReceipt,正式环境切换为生产地址。
Android 端方案:依赖 Google Play Billing Library
- 使用 Google Play Billing Library 的
queryPurchasesAsync方法,查询用户当前 Google 账户下的所有已购项目。Google 会将购买记录绑定到用户的 Google ID,只要用户登录同一账户,重装后查询即可恢复状态。 - 实现要点:
- 初始化 BillingClient 后,调用
queryPurchasesAsync传入对应的商品类型(如BillingClient.SkuType.INAPP或BillingClient.SkuType.SUBS)。 - 处理查询结果,将已购商品同步到本地状态,无需依赖设备标识。
- 注意处理账户切换情况,若用户更换 Google 账户,需重新查询并更新状态。
- 初始化 BillingClient 后,调用
RevenueCat 的正确配置(避免重装丢失)
- 你之前遇到的 RevenueCat ID 丢失问题,是因为未启用自动账户关联功能。RevenueCat 支持自动绑定用户的 Apple/Google 账户,无需手动处理:
- iOS 端:初始化 RevenueCat 时调用
Purchases.configure(withAPIKey:),允许框架自动获取 Apple ID 验证凭证,框架会将购买记录关联到用户 Apple ID 对应的 RevenueCat 匿名账户。 - Android 端:初始化时启用 BillingClient 集成,RevenueCat 会自动通过 Google Play 账户信息关联用户,重装后登录同一 Google 账户即可自动恢复购买记录。
- Testflight 测试时,使用沙盒环境 API 密钥,且测试账户登录对应的 Apple/Google 沙盒账户。
- iOS 端:初始化 RevenueCat 时调用
额外注意事项
- 禁止依赖任何设备级标识(如 IDFA、Android ID),这些标识在重装或恢复出厂设置后会变更,无法稳定关联用户。
- 订阅类内购,苹果和谷歌会主动发送服务器通知(Webhook),可配置后端接收这些通知,实时更新用户订阅状态,避免客户端查询延迟。
- 一次性购买的恢复,必须依赖客户端主动查询收据或已购项目,因为苹果/谷歌不会主动推送这类记录的变更。
内容的提问来源于stack exchange,提问作者heleloper
相关产品推荐
相关产品推荐

