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

Flutter iOS平台In-App Purchase订阅无法从App Store获取

Flutter iOS 订阅获取失败排查方案

问题背景

使用in_app_purchase 3.1.5、Flutter 3.7.6、iOS 16.3.1、Xcode 14.2真机测试时,调用queryProductDetails后,monthly_subscription始终出现在notFoundIds列表中。已完成付费协议签署、订阅创建、Xcode能力配置、StoreKit文件同步等操作,但问题仍存在。

排查步骤

  • 确认订阅与App版本关联:
    “Ready to Submit”状态的订阅必须关联到App Store Connect中待提交或已上架的App版本。进入对应App版本的“In-App Purchases”板块,检查是否已将monthly_subscription添加到当前版本中,未关联的订阅无法被测试环境识别。

  • 修正产品类型混淆:
    iOS不存在“非消耗型订阅”分类,只有自动续期订阅和非消耗型产品两类。如果你的产品是订阅服务,需确保在App Store Connect中创建的是“自动续期订阅”类型,而非“非消耗型产品”,类型不匹配会直接导致无法查询到产品。

  • 验证StoreKit配置文件:
    打开Xcode中的.storekit文件,确认monthly_subscription的Product ID、类型、价格等信息与App Store Connect完全一致。同步后再次检查scheme中选中的是最新配置文件,避免使用旧缓存的配置。

  • TestFlight测试的关键细节:
    上传TestFlight后需等待15-30分钟让后台完成订阅关联。测试必须使用沙箱测试账号(需在App Store Connect的“沙箱测试员”中添加),普通Apple ID或开发者账号无法正常测试订阅。

  • 代码细节校验:
    确保调用queryProductDetails时传入的Product ID字符串完全匹配(大小写、下划线、空格均需一致),例如避免误写为monthlySubscription。同时检查代理逻辑是否正确处理返回结果,示例代码:

    final response = await _inAppPurchase.queryProductDetails({'monthly_subscription'});
    if (response.notFoundIds.contains('monthly_subscription')) {
      // 处理未找到逻辑
    }
    
  • 匹配地区设置:
    订阅产品需在App Store Connect的“价格与可用性”中设置至少一个可用地区,且测试设备的沙箱账号地区必须与该地区一致,跨地区无法查询到订阅。

  • 清理缓存与重启:
    重启测试设备,删除Xcode的DerivedData目录(路径:Xcode -> 设置 -> 位置 -> DerivedData -> 删除),重新构建项目,避免缓存导致的配置不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:47:25