flutter - Flutter:获取过去在 iOS 上的购买记录
问题描述
一切都在 Android 上运行in_app_purchase
(https://pub.dev/packages/in_app_purchase)的新实现,但在 iOS 上我没有过去的购买。按照文档,我没有看到任何特别之处。
我的代码是:
final Stream<List<PurchaseDetails>> purchaseUpdated =
inAppPurchase.purchaseStream;
_subscription = purchaseUpdated.listen((purchaseDetailsList) {
if (purchaseDetailsList.isEmpty) {
Provider.of<AdState>(context, listen: false).toggleAds(context, true);
} else {
Provider.of<AdState>(context, listen: false)
.toggleAds(context, false);
this.purchases.addAll(purchaseDetailsList);
listenToPurchaseUpdated(purchaseDetailsList);
}
}, onDone: () {
_subscription.cancel();
}, onError: (error) {
// handle error here.
});
inAppPurchase.restorePurchases();
它只是不进去,如果我尝试购买相同的产品,我会收到此错误:
同一产品标识符有一个待处理的交易。请等待它完成或手动完成它
completePurchase
以避免边缘情况
解决方案
你需要打电话_inAppPurchase.completePurchase(purchase);
来完成它。代码在这里:
if (purchase.pendingCompletePurchase) {
_inAppPurchase.completePurchase(purchase);
}
您还需要在每次打开您的应用程序时调用它,以确保所有付款都已完成,这非常重要,记得purchase.pendingCompletePurchase
在调用它之前检查。
顺便说一句,我更喜欢flutter_inapp_purchase
那样in_app_purchase
,因为我在 iOS 中也遇到了一些意想不到的问题。
推荐阅读
- python - Big Sur 更新后修复 Anaconda Python
- c - 为什么我不能让球跳起来?它像火箭一样飞起来
- mysql - 将表重命名为自身的新版本时如何减少(或消除)mysql“表不存在”错误
- fedora - Fedora 33 上的 Gnome Box 无法打开
- angular - 错误类型错误:无法在 TenantsDetailsComponent_Template 读取未定义的属性“street1”
- sql-server - 在 SQL Server 中重新同步目标服务器
- python - python multithreaded server unable to receive data from client
- typescript - 大批
到数组 - swift - 在 TensorFlowLite for Swift 中获取预测
- python-3.x - 根据python中的传入列表分配一维数组的大小