You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Apple IAP订阅更新与flutter_inapp_purchase的交易记录匹配

iOS IAP 订阅通知与用户关联的标准最佳实践

现有方案评估

  • unique_vendor_identifier:确实不是可行方案,该标识会在用户卸载当前开发商所有App后重置,且无法跨设备同步,完全不适合作为用户和订阅的关联依据。
  • original_transaction_id:该标识全局唯一且永久不变,同一订阅的续费、跨设备恢复、取消后重新恢复(未过续费宽限期)场景下,original_transaction_id都会保持一致。仅当用户订阅完全过期后重新新购同一产品时,才会生成新的original_transaction_id,该场景本身属于新订阅交易,需要重新关联用户,不存在兼容问题,该方案可以正常使用。

官方推荐最优匹配方案:使用appAccountToken

首先回答字段对应问题:IAP通知中的appAccountToken和flutter_inapp_purchase库中的purchaseToken不是同一字段:

  • flutter_inapp_purchase返回的purchaseToken对应苹果交易凭证中的transactionIdentifier,是单次交易的标识,订阅每次续费都会生成新的该字段值,不适合长期关联使用。
  • appAccountToken是苹果官方设计用来关联开发者自有账号体系的标识,是订阅关联用户的最优方案,具备永久有效、跨设备同步的特性。

使用流程

  1. 用户发起订阅购买前,你需要在自有账号体系中生成对应用户的唯一标识(需符合UUID格式,可直接使用Firebase Auth的UID,或生成专用UUID和你的用户ID做映射),在调用flutter_inapp_purchase购买接口时将该值作为appAccountToken传入。
  2. 订阅购买完成后,将用户ID、original_transaction_id、appAccountToken三者关联存储到Firebase数据库中。
  3. Firebase云函数接收到苹果IAP通知时,优先读取通知中携带的appAccountToken直接匹配对应用户,无该字段时再用original_transaction_id兜底匹配,可覆盖所有场景。

存量业务兼容方案

如果已上线的旧版本没有配置appAccountToken,可先用original_transaction_id作为兜底匹配字段,后续用户触发恢复购买、新购操作时补传appAccountToken,逐步完成存量数据的替换。

内容的提问来源于stack exchange,提问作者ninajay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:36:03