Flutter:获取过去在 Android 上的购买记录

Posted

技术标签:

【中文标题】Flutter:获取过去在 Android 上的购买记录【英文标题】:Flutter: get past purchases on Android 【发布时间】:2021-11-06 12:49:34 【问题描述】:

我正在重构 in_app_purchases 并试图获取过去的购买记录。根据文档:

InAppPurchaseConnection.queryPastPurchases 方法已 删除。相反,您应该使用 InAppPurchase.restorePurchases。这 方法在 在AppPurchase.purchaseStream 中,PurchaseDetails 对象将是 标记为 PurchaseStatus.restored 的状态

但他们提供的示例并没有获取过去的购买记录,而是添加了您当时购买的那个。

我是从这里搬过来的:

final QueryPurchaseDetailsResponse purchaseResponse =
        await _connection.queryPastPurchases();

到这里:

final Stream<List<PurchaseDetails>> purchaseUpdated = inAppPurchase.purchaseStream;

print(purchaseUpdated.toList());

我尝试了上述方法,但列表为空,并且可以肯定我的用户已经购买了,当我尝试购买之前购买的相同版本时,我可以在此处显示:

如何从以前的购买中获得List

【问题讨论】:

【参考方案1】:

您必须将listen 转换为purchaseStream,例如示例中的this code:

    final Stream<List<PurchaseDetails>> purchaseUpdated =
        _inAppPurchase.purchaseStream;
    _subscription = purchaseUpdated.listen((purchaseDetailsList) 
      _listenToPurchaseUpdated(purchaseDetailsList);
    , onDone: () 
      _subscription.cancel();
    , onError: (error) 
      // handle error here.
    );

所有购买的商品都将添加到此流中,因此您需要将所有结果添加到您的列表中,如下所示:

    final List<PurchaseDetails> purchasedList = [];
    final Stream<List<PurchaseDetails>> purchaseUpdated =
        _inAppPurchase.purchaseStream;
    _subscription = purchaseUpdated.listen((purchaseDetailsList) 

      purchasedList.addAll(purchaseDetailsList);

    , onDone: () 
      _subscription.cancel();
    , onError: (error) 
      // handle error here.
    );

现在您可以使用purchasedList 作为以前的购买。顺便说一句,所有新购买的物品也将添加到该流和purchasedList

更新:完成上述步骤后,您需要致电_inAppPurchase.restorePurchases()获取之前的购买,所有之前的购买将由purchaseStream添加到purchasedList

【讨论】:

我也试过了,但是当我声明它时它没有进入。它列出了未来的购买,我需要得到以前的 purchaseStream 将收听this@Dani 中提到的先前和未来的购买 顺便说一句,你知道我该如何等待购买吗?我不知道如何使该功能异步 我的意思是,我知道它是一个 Stream,但是当应用程序加载执行其他操作时,我需要从 Future 获取过去的购买,就像我之前使用旧版本的包所做的那样:等待this.inAppPurchase.queryPastPurchases(); 您可以查看您的帖子。我已经回答了。

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

在flutter中从image_picker包中打开相机会导致真实设备上的应用程序崩溃,但在模拟器(android)中运行良好

Flutter MediaQuery获取屏幕信息以及屏幕适配

如何在 Flutter 中删除 MaterialApp 上的 Android 后退按钮?

`未解决的参考:新的 Flutter 项目上的 android`

Flutter“入口点不在当前项目中。” Android Studio 上的错误

Android 上的 Flutter 错误:找不到 aapt2-proto.jar