颤振:storekit_duplicate_product_object。有相同产品标识符的待处理交易
Posted
技术标签:
【中文标题】颤振:storekit_duplicate_product_object。有相同产品标识符的待处理交易【英文标题】:Flutter: storekit_duplicate_product_object. There is a pending transaction for the same product identifier 【发布时间】:2021-07-25 19:14:59 【问题描述】:我正在使用应用内购买官方插件。但是当我尝试在 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 包的 in_app_purchase: ^0.5.2
版本
我调用它的代码如下所示:
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);
,
)
【问题讨论】:
【参考方案1】:请关注#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
【讨论】:
这个SKPaymentQueueWrapper
在哪里?好像没找到。
没关系,我找到了。它在package:in_app_purchase_ios/store_kit_wrappers.dart
。
我认为我们需要在_connection.buyNonConsumable()
之前调用SKPaymentQueueWrapper().finishTransaction(skPaymentTransactionWrapper);
,而不是之后。以上是关于颤振:storekit_duplicate_product_object。有相同产品标识符的待处理交易的主要内容,如果未能解决你的问题,请参考以下文章
颤振——哎呀;颤振意外退出:“FileSystemException:删除失败,路径='...\.ios')
命令“颤振:新项目”导致错误(找不到命令“颤振.createProject”),我无法在 VSCODE 上调试颤振项目