首页 > 解决方案 > Flutter:购买流为空,尝试购买会抛出“相同产品标识符的待处理交易”

问题描述

我正在使用 Flutter in_app_purchase插件,v0.3.3+1.

在 iOS 上进行测试时,我开始购买,但中途取消了。之后,每当我再次尝试购买时,都会收到一条异常消息:

有相同产品标识符的待处理交易

我在购买流(下面的代码)上设置了一个监听器来完成购买。但是流没有发出任何事件。

_purchaseListener = InAppPurchaseConnection.instance.purchaseUpdatedStream.listen((purchases) {
  purchases.forEach((purchase) async {
    if (purchase.status == PurchaseStatus.purchased) //...
    if (purchase.pendingCompletePurchase) {
      //Complete purchase (retrying as Google Play refunds after 3 days if this does not succeed)
      retry<BillingResultWrapper>(() async {
        final completion = await InAppPurchaseConnection.instance.completePurchase(purchase);
        const errors = {BillingResponse.error, BillingResponse.serviceUnavailable};
        if (errors.contains(completion.responseCode)) throw Exception();
        return completion;
      });
    }
  });
});

标签: flutterin-app-purchasein-app-billing

解决方案


您必须先清理待处理的事务

var paymentWrapper = SKPaymentQueueWrapper();
var transactions = await paymentWrapper.transactions();
transactions.forEach((transaction) async {
  await paymentWrapper.finishTransaction(transaction);
});

推荐阅读