首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flutter in_app_purchases在模拟器上不可用-获取错误

问flutter in_app_purchases在模拟器上不可用-获取错误
EN

Stack Overflow用户
提问于 2021-02-22 15:04:21
回答 1查看 211关注 0票数 1

我正在尝试在_应用_购买:第一次购买^0.3.5+1。我在Google开发者控制台上有一个活动的产品设置,但我似乎不能让我的模拟器访问商店。连接的isAvailable方法总是返回false。单步执行代码时,connection实例似乎在私有属性中显示以下错误消息_purchasedUpdatedStream。不确定这是什么意思。看起来很相关。不确定从这里开始采取什么步骤。任何帮助都是非常感谢的。

getter‘_没有为类“GooglePlayConnection”定义“purchaseUpdatedStream”。

  • 'GooglePlayConnection‘来自

'package:in_应用_购买/源/入_应用_购买/谷歌_播放_Connection.dart的 ('../../flutterSDK/.pub-cache/hosted/pub.dartlang.org/in_应用_购 买-0.3.5+1/lib/src/in_应用_购买/谷歌_播放_connection.dart')。请尝试将名称更正为 现有getter的名称,或定义名为“”的getter或字段“”_purchaseUpdatedStream‘。 _purchaseUpdatedStream

Store类如下所示:

代码语言:javascript
复制
import 'dart:async';
import 'dart:io';
import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:quifil/models/status_ml.dart';

class StoreAPI {
  InAppPurchaseConnection _iap;
  bool available = true;
  StreamSubscription> _subscription;
  final String myProductID = 'quifil_ad_free';
  bool _isPurchased = false;
  List _purchases = [];
  List _products = [];

  StoreAPI() {
    InAppPurchaseConnection.enablePendingPurchases();
    _iap = InAppPurchaseConnection.instance;
  }

  bool get isPurchased {
    return _isPurchased;
  }

  set isPurchased(bool value) {
    _isPurchased = value;
  }

  List get purchases {
    return _purchases;
  }

  set purchases(List value) {
    _purchases = value;
  }

  List get products {
    return _products;
  }

  set products(List value) {
    _products = value;
  }

  Future fetchStoreInfo() async {
    Status status = Status(true);
    bool available = await _iap.isAvailable();
    if (available) {
      await _getProducts();
      await _getPastPurchases();
      verifyPurchase();
      _subscription = _iap.purchaseUpdatedStream.listen((purchases) {
        purchases.addAll(purchases);
        verifyPurchase();
      });
    } else {
      status.success = false;
      status.error = "Store is unavailable";
    }
    return status;
  }

  Future _getProducts() async {
    Set ids = Set.from([myProductID]);
    ProductDetailsResponse response = await _iap.queryProductDetails(ids);
    products = response.productDetails;
  }

  Future _getPastPurchases() async {
    QueryPurchaseDetailsResponse response = await _iap.queryPastPurchases();
    for (PurchaseDetails purchase in response.pastPurchases) {
      if (Platform.isIOS) {
        _iap.consumePurchase(purchase);
      }
    }
    purchases = response.pastPurchases;
  }

  void verifyPurchase() {
    PurchaseDetails purchase = hasPurchased(myProductID);
    if (purchase != null && purchase.status == PurchaseStatus.purchased) {
      if (purchase.pendingCompletePurchase) {
        _iap.completePurchase(purchase);
        isPurchased = true;
      }
    }
  }

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-25 04:55:41

事实证明,我有两个项目,我改变了这个问题。

我的笔记本电脑使用的是wifi,但wifi并不是网络接入的首选。因此,我禁用了其他LAN适配器。还有一种方法可以设置适配器的优先级,使wifi成为最高优先级。仿真器似乎喜欢选择最高优先级。

我的笔记本电脑wifi适配器DNS使用了一个我无法识别的地址。因此,我将其更改为使用Google的DNS作为8.8.8.8,备用DNS为8.8.4.4。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66311326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档