Flutter in_app_purchase queryPastPurchases() 在 iOS 上返回空列表

标签 flutter

为什么 queryPastPurchases() 在 Android 上返回一个包含我的订阅的填充列表,但在 iOS 上返回一个空列表?

我有一部 iOS SE 实体手机,我的苹果用户在 testflight 中被添加为测试人员,我在 App Store Connect 中添加了订阅,并且我能够购买订阅(在 testflight 中)。但是 queryPastPurchases() 返回一个空列表...

  // Gets past purchases
  Future<void> _getPastPurchases() async {
    QueryPurchaseDetailsResponse response =
        await _iap.queryPastPurchases();

    for (PurchaseDetails purchase in response.pastPurchases) {
      if (Platform.isIOS) {
        InAppPurchaseConnection.instance.completePurchase(purchase);
      }
    }

    setState(() {
      _purchases = response.pastPurchases;
    });
  }

最佳答案

事实证明代码没有任何问题。

为了让它工作,我必须创建一个沙箱用户。 然后我不得不从手机上当前登录的 AppID 注销。 然后我不得不在 Xcode 中从发布到调试“编辑方案”。 然后我在终端运行“flutter run”。 然后我购买了 NonConsumable 订阅,在对话框中我必须输入沙盒用户电子邮件和密码。

更新: 此外,我还必须在 App Store Connect 中创建一个全新的订阅,因为原始订阅陷入了一种既未购买也无法购买的状态。这是因为 completePurchase 在我的代码中的错误位置完成的。 它不应在 _getPastPurchases() 中完成,而应在实际购买逻辑中完成。

所以把 completePurchase 放在这里:

_subscription = _iap.purchaseUpdatedStream.listen((data) => setState(() {
    _purchases.addAll(data);
    for(PurchaseDetails purchase in _purchases){
        if(purchase.productID == 'subName'){
            //SOLUTION
            if (Platform.isIOS) {
                InAppPurchaseConnection.instance.completePurchase(purchase);
            }
        }
    }   
}));

PS:我不记得我的completePurchse是在for循环里还是在外面...

关于Flutter in_app_purchase queryPastPurchases() 在 iOS 上返回空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57353649/

相关文章:

flutter - gridview flutter 中的项目之间的空间

javascript - 如何在 Flutter webview 中操作 HTML?

flutter - 将 List<String> 转换为 List<Map<String,dynamic>>

flutter 包在包中找不到类

firebase - Flutter Firestore,如何在数组中添加对象列表

Flutter 如何使用导航删除底部导航

android - state as class 是否需要 SatefulWidget?

flutter - 如何在循环中进行 http 调用以在 dart flutter 中同步?

Flutter 应用程序依赖于使用特定于平台的 API 的包

flutter 剪辑,剪辑的小部件周围没有空间