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

Chr*_*ter 12 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;
    });
  }
Run Code Online (Sandbox Code Playgroud)

Chr*_*ter 5

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

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

更新: 此外,我还必须在应用程序商店连接中创建一个全新的订阅,因为原始订阅陷入了未购买或不可购买的状态。这是因为这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);
            }
        }
    }   
}));
Run Code Online (Sandbox Code Playgroud)

PS:我不记得我是否在for循环中或外部有completePurchse......

  • 我有同样的问题,但这些步骤似乎没有帮助。我可以使用沙箱用户购买订阅,并且成功,但是当我之后 queryPastPurchases() 时,它返回一个空数组。你还做了别的事吗? (2认同)