升级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
相关产品推荐
相关产品推荐

