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_purchase InAppPurchaseAndroidPlatformAddition.enablePendingPurchases(); 仅适用于 Android,它在 iOS 中什么也不做,因此您可以在两个平台上添加它,但 _inAppPurchase.completePurchase(purchase); 两者都需要。是的,这个包非常混乱,我花了很多时间来理解它,但它最后仍然存在问题。关于另一个包,我也和你有同感,但它是使应用程序工作的唯一方法,所以稍后我会在官方更好的情况下对其进行重构。 你可以看看this issue,和你的一样。

以上是关于Flutter:获取过去在 iOS 上的购买记录的主要内容,如果未能解决你的问题,请参考以下文章

不再能够在 InAppPurchase Flutter 中访问 queryPastPurchases

iOS 和 macOS 上的通用应用内购买

Flutter 应用内购买,检查退款

如何在 Flutter iOS 中激活应用内购买

使用flutter在ios中购买应用程序时如何知道应用程序环境是沙箱

如何从付费应用转换为应用内购买? iOS 和 Android + Flutter