You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flutter中内购商品状态卡在Draft,无法通过queryProductDetails获取商品详情怎么办?

Flutter中内购商品状态卡在Draft,无法通过queryProductDetails获取商品详情怎么办?

兄弟我之前也踩过这个Draft状态的大坑!这种情况完全是因为内购平台(苹果App Store Connect/谷歌Play Console)根本不会把草稿状态的商品对外暴露,咱们的App自然拿不到数据,下面是我亲测有效的解决步骤:

  • 先把商品从Draft状态“救”出来
    不管是苹果还是安卓,草稿状态的商品相当于还没“上货架”,系统根本不会对外提供:

    • 苹果端:打开App Store Connect找到你的内购项目,把所有必填项(名称、描述、价格、本地化信息这些)填得明明白白,一个都不能漏,然后点击「提交审核」——哪怕还没通过审核,只要进入“等待审核”状态,沙箱环境就能获取到商品了。
    • 安卓端:在Play Console的内购商品页面,填完所有必填字段后点击「保存并激活」,激活后的商品哪怕没发布到生产环境,只要给测试轨道(内部/封闭测试)配置好测试账号,就能被请求到。
  • 检查测试环境的配置细节
    这步最容易大意,别忽略:

    • 苹果必须用沙箱测试账号登录设备的App Store,绝对不能用真实账号!同时要确保App的Bundle ID和后台完全一致,代码里的my_product_id要和后台配置的Product ID一模一样,大小写都不能错!
    • 安卓要把你的测试账号添加到Play Console的「授权测试账号」列表,还要把App上传到至少内部测试轨道(不用发布,上传APK/AAB并分配测试人员就行),测试设备必须登录这个授权账号才能拿到商品。
  • 代码里的小细节也不能放过

    • 调用queryProductDetails之前,先调用InAppPurchase.instance.isAvailable()确认内购服务是可用的,服务挂了的话请求肯定返回空。
    • 核对Product ID的拼写!别多打空格、少打字母,苹果的ID可是严格区分大小写的。
    • 可以加个错误日志打印,看看是不是有隐藏错误:
      if (response.error != null) {
        debugPrint('获取商品失败原因:${response.error!.message}');
      }
      
      有时候错误信息会直接告诉你是“商品不存在”还是“权限不够”。
  • 最后等一等,别太心急
    苹果沙箱和谷歌Play的后台都有同步延迟,提交商品或配置后,最好等10-15分钟再测试,刚提交就测大概率拿不到数据。

备注:内容来源于stack exchange,提问作者Lala Naibova

火山引擎 最新活动