“您已经拥有此商品”在应用程序购买中颤动

问题描述 投票:0回答:2

我在我的应用程序中使用应用程序内购买。无忧购买。但是当我想第二次购买相同的产品时,这个 Play 商店向我显示“您已经拥有该商品”。我希望我的产品被一次又一次地购买。我不知道如何解决它。非常感谢你的帮助。我在下面留下了我的源代码。

      InAppPurchase iap = InAppPurchase.instance;

      bool available = true;

      List<ProductDetails> products = [];

      List<PurchaseDetails> purchases = [];

      StreamSubscription subscription;

      int credits = 0;

      @override
      void initState() {
        initialize();
        super.initState();
      }

      @override
      void dispose() {
        subscription.cancel();
        super.dispose();
      }

      void initialize() async {
        available = await iap.isAvailable();

        if (available) {
          await getProducts();


          verifyPurchase();

          subscription = iap.purchaseStream.listen((data) => setState(() {
                print('New Purchase');
                purchases.addAll(data);
                verifyPurchase();
              }));
        }
      }

      Future<void> getProducts() async {
        Set<String> ids = Set.from(['buy_300_wecoin']);
        ProductDetailsResponse response = await iap.queryProductDetails(ids);

        setState(() {
          products = response.productDetails;
        });
      }

      PurchaseDetails hasPurchased(String productID) {
        return purchases.firstWhere((purchase) => purchase.productID == productID,
            orElse: () => null);
      }

      bool verifyPurchase() {
        PurchaseDetails purchase = hasPurchased('buy_300_wecoin');
        if (purchase != null && purchase.status == PurchaseStatus.purchased) {
          return true;
        }
      }

      void buyProduct(ProductDetails prod) {
        final PurchaseParam purchaseParam = PurchaseParam(productDetails: prod);
        iap.buyConsumable(purchaseParam: purchaseParam, autoConsume: false);
      }
flutter dart google-play in-app-purchase
2个回答
0
投票

首先,手动放置

using

import 'package:in_app_purchase_android/in_app_purchase_android.dart';

然后在

InAppPurchase.instance.purchaseStream
方法中使用以下代码

if (purchaseDetails.status == PurchaseStatus.restored) {
      if (Platform.isAndroid) {
        final InAppPurchaseAndroidPlatformAddition androidAddition =
            _inAppPurchases.getPlatformAddition<InAppPurchaseAndroidPlatformAddition>();
        await androidAddition.consumePurchase(purchaseDetails);
      }
    }

然后在

initState()
中添加以下行,以便调用恢复购买并触发 Stream 侦听器。

_inAppPurchases.restorePurchases();

-1
投票

您应该使用消耗品应用内购买

消耗品是用户用来接收应用内内容(例如游戏内货币)的产品。当用户消费该产品时,您的应用程序会分配相关内容,用户可以 然后再次购买该商品。

请注意,App Store 没有任何用于查询消耗品的 API,Google Play 认为消耗品一旦被标记为已消耗且无法在此处返回,则不再拥有。要跨设备恢复这些内容,您需要将它们保留在您自己的服务器上并进行查询。

尝试 in_app_purchase 库并使用该库阅读有关消耗性 IAP 的信息。

© www.soinside.com 2019 - 2024. All rights reserved.