繁体   English   中英

恢复购买在 Flutter/Google Play 中不起作用

[英]Restore purchase not working in Flutter/Google Play

我已按照in_app_purchase示例在应用程序购买 (IAP) 中实施

我可以从商店购买产品(我只有一个设置)。 但是在测试“用户有一部新手机”的场景时,恢复购买似乎不起作用。 也没有错误。

我已经在提供者模式中实现了这一点。 存储连接初始化如下:

_isStoreAvailable = await _inAppPurchase.isAvailable();

采购是这样实现的:

 Future<void> initializePurchase() async {
      ProductDetailsResponse response =
          await _inAppPurchase.queryProductDetails(_productIds);
      if (response.notFoundIDs.isNotEmpty) {
        // Handle the error.
        print("not found product in store!)");
      } else {
        PurchaseParam purchaseParam = PurchaseParam(
          productDetails: response.productDetails.first,
        );
        _inAppPurchase.buyNonConsumable(purchaseParam: purchaseParam);
      }
  }

我使用以下代码监听更改:

  final Stream<List<PurchaseDetails>> purchaseUpdated =
        _inAppPurchase.purchaseStream;
    _subscription =
        purchaseUpdated.listen((List<PurchaseDetails> purchaseDetailsList) {
      _listenToPurchaseUpdated(purchaseDetailsList);
    }, onDone: () {
      _subscription.cancel();
    }, onError: (error) {
      print("listen error: $error");
    });

...和这个

  Future<void> _listenToPurchaseUpdated(
      List<PurchaseDetails> purchaseDetailsList) async {
    for (final PurchaseDetails purchaseDetails in purchaseDetailsList) {
      if (purchaseDetails.status != PurchaseStatus.pending) {
        if (purchaseDetails.status == PurchaseStatus.error) {
          //handle error
        } else if (purchaseDetails.status == PurchaseStatus.purchased ||
            purchaseDetails.status == PurchaseStatus.restored) {

          setLicense(StoreLicenseStatus.paid);
          notifyListeners();

          if (purchaseDetails.pendingCompletePurchase) {
            await _inAppPurchase.completePurchase(purchaseDetails);
          }
        }
      }
    }
  }

用户可以使用以下代码请求恢复购买:

 Future<void> restorePurchases() async {
    await _inAppPurchase.restorePurchases();
  }

除了恢复之外的一切都有效。 我可以购买产品,清除数据,当我再次启动应用程序时,如果我尝试购买,我会收到来自商店的消息“您已经拥有该商品”。 所以商店承认该产品已被购买,太棒了! 但是当我点击“恢复”时,什么也没有发生。

我在这里错过了什么吗?

这是在模拟器(Pixel 4 API 32)上,也在真实设备上。

对我来说完全一样的情况。 尽管我肯定有购买,但恢复购买不会恢复任何东西。

此外,我必须提到,当我在本地构建应用程序(调试和发布模式)时,它可以完美运行,但是当我使用 CICD 构建它并进行 Firebase App Distribution 或 Play Console 内部测试时,就会出现问题。

GitHub线程

这是由in_app_purchase_android包中的错误引起的。

新的计费 API 在 queryPurchasesAsync 中使用异步侦听器。 有一个变化是在后台线程而不是主 UI 线程上调用侦听器,这导致查询购买永远不会完成。

同时将此添加到您的pubspec.yaml作为解决方法:

dependency_overrides:
in_app_purchase_android: 0.2.2+8

有关更多详细信息,请参阅此GitHub 问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM