在flutter中使用restorePurchases查找已经购买的订阅

时间:2021-05-31 18:25:58

标签: ios flutter in-app-purchase in-app-subscription

我在我的 Flutter 应用中使用 in_app_purchase: ^1.0.1 来实现订阅的应用内购买。我已经成功地购买了一次订阅,但是当我尝试使用 restorePurchases() 来获取用户已经购买的订阅时,我得到的列表每次都会增加长度。似乎不可能重复购买同一产品。

这是我的代码。

_processIAP() async {
    Stream purchaseUpdated = InAppPurchase.instance.purchaseStream;
    _subscription = purchaseUpdated.listen((purchaseDetailsList) {
        print("purchaseDetailsList.length = " + purchaseDetailsList.length.toString());
        purchaseDetailsList.forEach((PurchaseDetails purchaseDetails) async {
        
        print(purchaseDetails.purchaseID + " " + purchaseDetails.pendingCompletePurchase.toString());

        if (purchaseDetails.status == PurchaseStatus.pending) {
            print("Purchase is still pending!");
        } else {
            if (purchaseDetails.status == PurchaseStatus.error) {
                print("An error has occurred!");
            } else if (purchaseDetails.status == PurchaseStatus.purchased || purchaseDetails.status == PurchaseStatus.restored) {
                print("Purchased or restored successfully!");

                await InAppPurchase.instance.completePurchase(purchaseDetails);
                print("Purchase marked as completed");
          }
          if (purchaseDetails.pendingCompletePurchase) {

                await InAppPurchase.instance.completePurchase(purchaseDetails);
                print("Purchase marked as completed");
          }
        }
      });
    }, onDone: () {
      print("DONE!");
      _subscription.cancel();
    }, onError: (error) {
      print(error);
    });

    const Set<String> _kIds = <String>{'basic_monthly_apple'};
    final ProductDetailsResponse response = await InAppPurchase.instance.queryProductDetails(_kIds);
    if (response.notFoundIDs.isNotEmpty) {
      print("Some product IDs not found!");
    }

    print("Restoring previous purchases!");
    await InAppPurchase.instance.restorePurchases();

    //PurchaseParam purchaseParam = PurchaseParam(productDetails: products[0]);
    // InAppPurchase.instance.buyNonConsumable(purchaseParam: purchaseParam);
}

在日志中,每次我尝试在使用 purchaseDetailsList 方法后购买订阅时,restorePurchases() 的长度都会增加(增加 1)。每个 purchaseDetail 都有一个唯一的 purchaseID。此外,所有 pendingCompletePurchasepurchaseDetails 始终为 true,即使它们已被标记为已完成。

日志 -

Some product IDs not found!
flutter: Restoring previous purchases!
flutter: purchaseDetailsList.length = 6
flutter: 1000000819394740 true
flutter: Purchased or restored successfully!
flutter: 1000000819394741 true
flutter: Purchased or restored successfully!
flutter: 1000000819394742 true
flutter: Purchased or restored successfully!
flutter: 1000000819394743 true
flutter: Purchased or restored successfully!
flutter: 1000000819394744 true
flutter: Purchased or restored successfully!
flutter: 1000000819394745 true
flutter: Purchased or restored successfully!
flutter: Purchase marked as completed
flutter: Purchase marked as completed
flutter: Purchase marked as completed
flutter: Purchase marked as completed
flutter: Purchase marked as completed
flutter: Purchase marked as completed

每次我重新启动应用程序并重试时,长度 6 都会不断增加。此外,我不能与 buyNonConsumable 一起执行 restorePurchases。它会导致一个错误,指示需要标记为已完成的待处理事务。

非常感谢任何帮助。


0 个答案:

没有答案