Flutter iOS端内购折扣促销码流程问题:PurchaseUpdated事件监听器第二次不触发
Flutter iOS端内购折扣促销码流程问题:PurchaseUpdated事件监听器第二次不触发
我之前也遇到过类似的iOS内购促销码回调失效的问题,结合你的场景,整理几个可能的排查和解决方向:
检查StoreKit配置的测试状态与促销码属性
因为你用的是Xcode的StoreKit配置文件模拟内购流程,第一次成功兑换后,测试环境的用户状态可能已经标记为已使用该促销码了。你可以试试:- 在Xcode中打开
Product菜单,选择StoreKit->Reset StoreKit Configuration,重置测试状态后重启App再测试第二次兑换; - 确认你在StoreKit配置里创建的促销码是否设置为可重复使用,如果是一次性的促销码,第二次使用自然不会触发回调。
- 在Xcode中打开
排查
PurchaseUpdated监听器的注册时机与生命周期
有可能第一次回调后,监听器被意外取消注册或者没有重新绑定:- 检查你的监听器注册逻辑,是不是只在App启动时注册了一次,而在促销码兑换完成后(比如页面销毁、状态重置)导致监听器失效;
- 可以尝试在每次打开促销码兑换页面前,重新订阅
purchaseUpdatedStream,或者把监听器放在App的根组件中,保证其全局持久存在。
扩展监听范围,排查其他回调事件
iOS的PromoCodeRedemptionSheet完成兑换后,除了PurchaseUpdated事件,可能还会触发其他相关回调:- 同时监听Flutter内购插件的
purchaseErrorStream,看看有没有错误信息返回,帮助定位问题; - 确认你是否正确实现了
TransactionObserver的所有相关方法,避免遗漏关键的状态回调。
- 同时监听Flutter内购插件的
验证插件版本与兼容性
旧版本的Flutter内购插件(比如in_app_purchase)可能存在iOS 15+或StoreKit 2的兼容性问题,导致第二次兑换时回调丢失:- 尝试将内购插件更新到最新版本,然后重新编译项目再测试。
备注:内容来源于stack exchange,提问作者FlutterDev
相关产品推荐
相关产品推荐

