flutter :storekit_duplicate_product_object。同一产品标识符有待处理的交易

标签 flutter dart in-app-purchase in-app

我正在使用应用内购买官方插件。但是当我尝试在 iOS 上购买订阅时,我看到以下错误:

Unhandled Exception: PlatformException(storekit_duplicate_product_object, There is a pending transaction for the same product identifier. Please either wait for it to be finished or finish it manually using `completePurchase` to avoid edge cases., {applicationUsername: null, requestData: null, quantity: 1, productIdentifier: in_app_test, simulatesAskToBuyInSandbox: false}, null)
我正在使用版本 in_app_purchase: ^0.5.2 in_app_purchase 包的
我调用它的代码看起来像这样:
   TextButton(
      child: Text(productDetails.price),
      style: flatButtonStyle,
      onPressed: () async {
        PurchaseParam purchaseParam = PurchaseParam(
            productDetails: productDetails,
            applicationUserName: null,
            sandboxTesting: false);
        if (productDetails.id == _kConsumableId) {
          _connection.buyConsumable(
              purchaseParam: purchaseParam,
              autoConsume: kAutoConsume || Platform.isIOS);
        } else {
          _connection.buyNonConsumable(
              purchaseParam: purchaseParam);

        }},
    )

最佳答案

请关注 #60763
您可以使用 SKPaymentQueueWrapper().finishTransaction(skPaymentTransactionWrapper) 完成交易这些交易
为了避免这个错误,把下面的代码放在 buyNonConsumable 之前和工作:

var transactions = await SKPaymentQueueWrapper().transactions();
 transactions.forEach((skPaymentTransactionWrapper) {
    SKPaymentQueueWrapper().finishTransaction(skPaymentTransactionWrapper);
});
完整示例
TextButton(
  child: Text(productDetails.price),
  style: flatButtonStyle,
  onPressed: () async {
    PurchaseParam purchaseParam = PurchaseParam(
        productDetails: productDetails,
        applicationUserName: null,
        sandboxTesting: false);
    if (productDetails.id == _kConsumableId) {
      _connection.buyConsumable(
          purchaseParam: purchaseParam,
          autoConsume: kAutoConsume || Platform.isIOS);
    } else {
      _connection.buyNonConsumable(
          purchaseParam: purchaseParam);
      var transactions = await SKPaymentQueueWrapper().transactions();
      transactions.forEach((skPaymentTransactionWrapper) {
        SKPaymentQueueWrapper().finishTransaction(skPaymentTransactionWrapper);
      });
    }
  },
)
答案来源siloebb's answer

关于 flutter :storekit_duplicate_product_object。同一产品标识符有待处理的交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67367861/

相关文章:

dart - 在 flutter 中使用底部导航栏在页面之间传递数据

android - 未处理的异常 : MissingPluginException(No implementation found

flutter - 如何将小部件作为参数传递给函数

android - Firebase 云消息传递 : Parsing data from the message even when the app is terminated

ios - 我应该显示恢复订阅按钮吗?

flutter - 如何在 Dart 中使用扩展

flutter Riverpod : FutureProvider family never gets resolved

iphone - 在普通类使用SKProduct

dart - 在 CupertinoNavigationBar 中,我如何在前导中显示除后退按钮之外的按钮?

java - 刷新库存时出错。应用内结算