为什么 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/