如何将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是苹果官方设计用来关联开发者自有账号体系的标识,是订阅关联用户的最优方案,具备永久有效、跨设备同步的特性。
使用流程
- 用户发起订阅购买前,你需要在自有账号体系中生成对应用户的唯一标识(需符合UUID格式,可直接使用Firebase Auth的UID,或生成专用UUID和你的用户ID做映射),在调用flutter_inapp_purchase购买接口时将该值作为
appAccountToken传入。 - 订阅购买完成后,将用户ID、
original_transaction_id、appAccountToken三者关联存储到Firebase数据库中。 - Firebase云函数接收到苹果IAP通知时,优先读取通知中携带的
appAccountToken直接匹配对应用户,无该字段时再用original_transaction_id兜底匹配,可覆盖所有场景。
存量业务兼容方案
如果已上线的旧版本没有配置appAccountToken,可先用original_transaction_id作为兜底匹配字段,后续用户触发恢复购买、新购操作时补传appAccountToken,逐步完成存量数据的替换。
内容的提问来源于stack exchange,提问作者ninajay
相关产品推荐
相关产品推荐

