Flutter:获取过去在 iOS 上的购买记录
Posted
技术标签:
【中文标题】Flutter:获取过去在 iOS 上的购买记录【英文标题】:Flutter: get past purchases on iOS 【发布时间】:2021-11-08 01:02:40 【问题描述】: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
避免极端情况
【问题讨论】:
【参考方案1】:我在 repo 上开了一张票,它在 1.0.9 版本上得到了修复: https://github.com/flutter/flutter/issues/89950
【讨论】:
【参考方案2】:您需要致电_inAppPurchase.completePurchase(purchase);
来完成它。 Code here:
if (purchase.pendingCompletePurchase)
_inAppPurchase.completePurchase(purchase);
您还需要在每次打开应用时调用它,以确保所有付款都已完成,这很重要,调用前记得检查purchase.pendingCompletePurchase
。
顺便说一句,我更喜欢 flutter_inapp_purchase
然后 in_app_purchase
因为我在 iOS 中也遇到了一些意想不到的问题。
【讨论】:
但如果我这样做,购买总是空的。我还没有。我需要先听听他们的声音,然后像在 Android 上一样获得恢复的声音。关于另一个包裹,我过去遇到过一些废弃包裹的问题,尽管它们比官方要好。我知道一个比我正在使用的更好,但我觉得使用官方的更安全。 我还在检查他们在 repo 上的示例,这很令人困惑:有一个适用于 Android、iOS 和两者的项目。我认为突破性的变化太多了,我已经做好了一切 信息也很不一致。根据您检查的位置,InAppPurchaseAndroidPlatformAddition.enablePendingPurchases();仅适用于 Android 或两个平台。对于两者:codelabs.developers.google.com/codelabs/… 对于 Android:pub.dev/packages/in_app_purchaseInAppPurchaseAndroidPlatformAddition.enablePendingPurchases();
仅适用于 Android,它在 iOS 中什么也不做,因此您可以在两个平台上添加它,但 _inAppPurchase.completePurchase(purchase);
两者都需要。是的,这个包非常混乱,我花了很多时间来理解它,但它最后仍然存在问题。关于另一个包,我也和你有同感,但它是使应用程序工作的唯一方法,所以稍后我会在官方更好的情况下对其进行重构。
你可以看看this issue,和你的一样。以上是关于Flutter:获取过去在 iOS 上的购买记录的主要内容,如果未能解决你的问题,请参考以下文章
不再能够在 InAppPurchase Flutter 中访问 queryPastPurchases