android - Flutter In App Purchase : InAppPurchaseConnection. instance.queryProductDetails 返回空列表

标签 android ios flutter in-app-purchase

我正在关注这个视频:https://www.youtube.com/watch?v=NWbkKH-2xcQ&t=495s我正在使用 Android 设备。

当我尝试从 google play 控制台获取产品时,我在本节中得到一个空列表。

  Future<void> _getProducts() async {

    Set<String> ids = <String>['credits_test'].toSet();

    ProductDetailsResponse response = await InAppPurchaseConnection.instance.queryProductDetails(ids);

    setState(() {
      _products = response.productDetails;
      if(response.productDetails.isNotEmpty){
        print(response.productDetails.elementAt(0));
      } else{
        print("void list");
      }
    });
  }

我也试试这个页面:https://joebirch.co/2019/05/31/adding-in-app-purchases-to-flutter-apps/

我的代码:
class _MyHomePageState extends State<MyHomePage> {

  //Interface
  InAppPurchaseConnection _iap = InAppPurchaseConnection.instance;

  bool _available = true;
  List<ProductDetails> _products = [];
  List<PurchaseDetails> _purchases = [];
  StreamSubscription _subscription;

  int _credits = 0;


  @override
  void initState() {
    _initialize();
    _getProducts();
    print("Hola");
    super.initState();
  }


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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(_available ? "Open for business" : "Not available"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
              Text("Hello World!"),
              Text("$_credits"),
              FlatButton(child: Text("Add Credits"), onPressed: () => _buyProduct(_products.elementAt(0)))
          ],
        ),
      ),
    );
  }


  void _initialize() async {
     _available = await _iap.isAvailable();
     if(_available){
       await _getProducts();
       await _getPastPurchases();

       _verifyPurchase();

       _subscription = _iap.purchaseUpdatedStream.listen((data) => setState((){
         print("New purchase");
         _purchases.addAll(data);
         _verifyPurchase();
       }));
     }
  }

  Future<void> _getProducts() async {

    Set<String> ids = <String>['credits_test'].toSet();

    ProductDetailsResponse response = await InAppPurchaseConnection.instance.queryProductDetails(ids);

    setState(() {
      _products = response.productDetails;
      if(response.productDetails.isNotEmpty){
        print(response.productDetails.elementAt(0));
      } else{
        print("void list");
      }
    });
  }

  void _verifyPurchase(){
    PurchaseDetails purchase = _hasPurchased(testID);
    if(purchase != null && purchase.status == PurchaseStatus.purchased){
      _credits  += 10;
    }
  }

  void _buyProduct(ProductDetails prod){
    final PurchaseParam purchaseParam = PurchaseParam(productDetails: prod);

    _iap.buyConsumable(purchaseParam: purchaseParam, autoConsume: false );
  }
}

我的终端正在打印“无效列表”,我期待查询中的 ProductDetail。

最佳答案

您需要使用预留的 SKU 进行测试:android.test.purchased
代码:Set<String> ids = <String>['android.test.purchased'].toSet();

关于android - Flutter In App Purchase : InAppPurchaseConnection. instance.queryProductDetails 返回空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57482157/

相关文章:

android - 以编程方式添加、删除和设置 CardView 参数

android - Android-Robotium 可以做哪些类型的测试

ios - 尝试使用 UIWebView 加载 10 个网页后应用程序崩溃

android.R.id.empty 在 Xoom/Honeycomb 中损坏了吗?

java - 从列表中获取值的最佳编程实践

ios - Alamofire 无法禁用缓存

ios - 比数据参数更多的 '%' 转换

listview - 如何使 `ListView.builder` 从特定索引开始

firebase - 如何将 Flutter Web 与 Firebase 集成?

flutter :How to build a infinite list using future builder that display n-record at a time