升级包到 in_app_purchase 3.1.7 后,在应用程序购买中出现错误,offer token is null

问题描述 投票:0回答:2

我已经在我的 flutter 应用程序中实现了应用程序购买中的非消耗品。在应用程序购买包升级后,购买对话框未显示,并给出以下错误:

PlatformException(INVALID_OFFER_TOKEN,每月产品的优惠令牌为空无效。请确保仅传递属于该产品的优惠令牌。要获取产品的优惠令牌,请获取产品。如何获取产品的示例可以是在这里找到:https://github.com/flutter/packages/blob/main/packages/in_app_purchase/in_app_purchase/README.md#loading-products-for-sale,null,null)

我的基本计划没有任何优惠。 如有任何帮助,我们将不胜感激。

flutter in-app-purchase
2个回答
2
投票

我找到了解决办法。要解决Flutter中应用内购买库的相关问题,您可以使用该库的3.1.5版本。

内购库最新版本3.1.7,内部依赖了版本为^0.3.0+8的in_app_purchase_android库。在此版本中,优惠令牌是强制性的,这可能会导致无效优惠令牌的问题,无论您是否在 Play 商店中添加了令牌。

为了避免这些问题,您可以专门使用 in_app_purchase 库的 3.1.5 版本。此版本不应该有强制性的优惠令牌要求,可以帮助解决问题。

确保在依赖项部分下使用以下行更新您的

pubspec.yaml
文件:

dependencies:
  in_app_purchase: 3.1.5

保存文件后,运行

flutter pub get
以获取指定版本的库并解决问题。

通过使用 in_app_purchase 库的 3.1.5 版本,您应该能够避免与强制报价令牌要求相关的问题。


2
投票

我建议使用从

queryProductDetails
返回的产品详细信息。我遇到了同样的问题并解决了它。

这是一个示例,请务必使用正确的产品 ID 进行更新。

Future<void> purchaseSubscription() async {
  final productDetailsResponse = await InAppPurchase.instance.queryProductDetails({YOUR_PRODUCT_ID});
  final productDetails = productDetailsResponse.productDetails.firstOrNull;

  if (productDetails != null) {
    final purchaseParam = PurchaseParam(productDetails: productDetails);
    await InAppPurchase.instance.buyNonConsumable(purchaseParam: purchaseParam);
  }
}

编辑:我的问题的背景

我创建了自己的模型,它从返回的

ProductDetails
复制了属性,这样我就不需要再次调用
queryProductDetails
。问题是 Android 上从
queryProductDetails
返回的模型是
GooglePlayProductDetails
。我没有检查类型是否为
GooglePlayProductDetails
,只是将其视为
ProductDetails
来处理。
GooglePlayProductDetails
有额外的属性,但这些属性没有被复制,因此丢失了。为了进行购买,我实例化了
ProductDetails
,然后将其用于实例化
PurchaseParam
,这意味着附加字段不存在,因此购买失败并出现此错误。

上述解决方案之所以有效,是因为它使用了

GooglePlayProductDetails
,它具有所需的所有属性。

事后看来,我的“优化”尝试并没有经过深思熟虑,因为将来如果将更多属性添加到

GooglePlayProductDetails
,那么我将不得不将它们添加到我自己的自定义模型中,这似乎是非常糟糕的事情。很容易错过。这就是为什么我认为这是一个更好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.