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

升级in_apppurchase至3.1.7后出现Offer token null错误求助

解决方案:in_app_purchase 3.1.7版本非消耗型内购弹窗无法显示问题

核心原因

升级到3.1.7版本后,buyNonConsumable或buySubscriptions方法对offerToken参数的校验逻辑收紧。即使产品无优惠活动,传递null或空字符串会触发错误——新版本要求必须使用从已获取产品详情中拿到的有效offerToken(基础套餐也对应有一个默认的offer token)。

具体修复步骤

  • 完整拉取产品信息
    调用queryProductDetails接口获取产品详情时,确保完整获取每个产品的subscriptionOfferDetails(订阅类产品)或对应offer信息。无优惠的基础套餐,产品详情里会包含一个默认的offer token。

  • 使用产品详情中的默认offerToken
    发起购买请求时,不再手动传递null作为offerToken,而是从拉取到的ProductDetails对象中提取默认值:

    // 假设product为已获取的ProductDetails实例
    String? offerToken;
    if (product.subscriptionOfferDetails != null && product.subscriptionOfferDetails!.isNotEmpty) {
      // 基础套餐通常只有一个默认offer,直接取第一个即可
      offerToken = product.subscriptionOfferDetails!.first.offerToken;
    }
    // 发起购买请求
    final PurchaseParam purchaseParam = PurchaseParam(
      productDetails: product,
      offerToken: offerToken, // 使用获取到的默认token而非null
    );
    InAppPurchase.instance.buyNonConsumable(purchaseParam: purchaseParam);
    
  • 清理硬编码的无效参数
    检查代码中是否存在手动设置offerToken: null或空字符串的逻辑,直接替换为从产品详情中获取的默认token。

  • 验证后台产品配置
    确认App Store Connect/Google Play Console中,基础套餐无额外优惠设置,且产品状态正常、已同步到测试环境。

关键注意点

新版本in_app_purchase不再允许传递无效offerToken(包括null),必须使用通过queryProductDetails获取的、与产品绑定的有效token;一次性非消耗品若无需offerToken,需确保调用方法时参数传递符合新版本要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:52:10