flutter - 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;
});
}
});
});
解决方案
您必须先清理待处理的事务
var paymentWrapper = SKPaymentQueueWrapper();
var transactions = await paymentWrapper.transactions();
transactions.forEach((transaction) async {
await paymentWrapper.finishTransaction(transaction);
});