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

Flutter in_app_purchase:APP外兑换促销码关联用户ID方案咨询

关联APP外促销码兑换用户与APP内UserID的实现方案

核心问题原因

苹果App Store和Google Play的官方促销码兑换流程,本身不会在服务器通知中携带你的APP内UserID——因为兑换操作是在平台侧完成的,与你的应用用户体系完全隔离,这也是你之前依赖服务器通知未得到预期结果的根本原因。

针对苹果App Store的实现逻辑

  • 客户端主动同步收据
    用户打开APP时,调用SKReceiptRefreshRequest刷新本地收据,将最新的收据数据与当前登录的APP内UserID一起上传至你的服务器。服务器解析收据时,提取交易的originalTransactionId、offerCodeRefName(促销码关联标识),将这些字段与UserID绑定存储。
  • 优化服务器通知关联
    当服务器收到App Store的订阅通知时,先记录originalTransactionId和交易状态。后续客户端上传收据+UserID时,通过originalTransactionId匹配已存在的交易记录,自动完成关联。
  • 自定义促销码落地页(可选)
    如果你的促销码兑换链接是自有落地页(而非直接跳转苹果官方兑换页),可以在链接中加入临时标识(如temp_identifier),引导用户先登录APP内账号,将temp_identifier与UserID提前绑定。用户完成苹果兑换后,服务器通过收据中的促销码标识匹配temp_identifier,最终关联到UserID。

针对Google Play的实现逻辑

  • 客户端主动上报订阅信息
    用户打开APP时,调用Google Play Billing Library的queryPurchasesAsync接口获取当前账号的订阅列表,将订阅的purchaseToken、originalPurchaseToken与APP内UserID一起上传至服务器,完成直接绑定。
  • APP内触发兑换(可选)
    如果允许用户在APP内兑换促销码,调用BillingClient.redeemOfferCode接口完成兑换,此时客户端可直接获取到购买凭证,同时携带UserID上传服务器,一步完成关联。
  • 服务器通知补全关联
    服务器收到Google Play的实时通知时,先存储purchaseToken和交易信息。当客户端后续上报相同purchaseToken+UserID时,自动补全关联关系;对于自动续费的后续交易,可通过originalPurchaseToken匹配到已绑定的UserID。

通用补充方案

  • 用户主动触发同步
    在APP内添加「同步订阅状态」入口,用户点击后触发客户端上传收据/订阅信息与UserID,适用于用户兑换后主动打开APP的场景。
  • 服务器定期校验
    对于未关联UserID的交易记录,定期调用苹果/谷歌的官方API查询订阅状态,当客户端上报对应交易的凭证时,自动匹配绑定UserID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:53:10