Flutter 颤振:购买流为空,尝试购买抛出';相同产品标识符的挂起交易';

Flutter 颤振:购买流为空,尝试购买抛出';相同产品标识符的挂起交易';,flutter,in-app-purchase,in-app-billing,Flutter,In App Purchase,In App Billing,我正在使用颤振插件,v0.3.3+1 在iOS上测试时,我开始购买,但中途取消了。之后,每当我再次尝试购买时,我都会收到一条异常消息: 同一产品标识符存在挂起的事务 我在购买流(下面的代码)上设置了一个侦听器来完成购买。但是流没有发出任何事件 _purchaseListener = InAppPurchaseConnection.instance.purchaseUpdatedStream.listen((purchases) { purchases.forEach((purchase) a

我正在使用颤振插件,
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;
      });
    }
  });
});
\u purchaseListener=InAppPurchaseConnection.instance.purchaseUpdatedStream.listen((购买){
forEach((购买)异步{
如果(purchase.status==PurchaseStatus.purchased)/。。。
if(采购.待完成采购){
//完成购买(如果不成功,3天后谷歌播放将退款)
重试(()异步{
最终完成=等待InAppPurchaseConnection.instance.completePurchase(购买);
常量错误={BillingResponse.error,BillingResponse.serviceUnavailable};
if(errors.contains(completion.responseCode))抛出异常();
返回完成;
});
}
});
});

流在
debug
模式下没有发出任何事件,因此购买从未完成


release
模式下进行测试,它工作得非常完美。

您必须首先清除挂起的事务

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

您是如何在发布模式下对沙盒用户进行测试的?也许更重要的是,您是如何在发现问题后清除队列的?