Chr*_*ter 5 in-app-purchase flutter
为什么 queryPastPurchase 在 iOS Testflight 用户上返回 null,而在 Android 上它是成功的。
请帮我解决这个问题。
这是我的代码:
...
InAppPurchaseConnection _iap = InAppPurchaseConnection.instance;
@override
initState() {
_initialize();
super.initState();
}
void _initialize() async {
// Check availability of In App Purchases
_available = await _iap.isAvailable();
if (_available) {
await _getProducts();
await _getPastPurchases();
_getSubscriptionPrice();
}
_subscription = _iap.purchaseUpdatedStream.listen((data) => setState(() {
_purchases.addAll(data);
for(PurchaseDetails purchase in _purchases){
if(purchase.productID == 'subName'){
setState(() {
showSubscriptionDialog = false;
});
}
}
_verifyPurchase();
}));
}
/// Get all products available for sale
Future<void> _getProducts() async {
Set<String> ids = Set.from(['subName']);
ProductDetailsResponse response = await _iap.queryProductDetails(ids);
setState(() {
_products = response.productDetails;
});
if(response.error != null && response.error.message.length > 0){
_iapStoreProblem = response.error.message;
}
}
/// Gets past purchases
Future<void> _getPastPurchases() async {
bool hasSub = false;
QueryPurchaseDetailsResponse response = await _iap.queryPastPurchases();
for (PurchaseDetails purchase in response.pastPurchases) {
if (Platform.isIOS) {
InAppPurchaseConnection.instance.completePurchase(purchase);
}
}
setState(() {
_purchases = response.pastPurchases;
});
for(PurchaseDetails purchase in _purchases){
if(purchase.billingClientPurchase.sku == "subName"){
hasSub = true;
}
}
if(hasSub){
setState(() {
showSubscriptionDialog = false;
firstTimeBuySub = false;
});
}else{
setState(() {
showSubscriptionDialog = true;
firstTimeBuySub = true;
});
}
}
Run Code Online (Sandbox Code Playgroud)
执行buyProduct() 时,它会在_initialize() 中找到订阅购买,只有当我尝试执行_getPastPurchases() 时,它才无法在iOS 上返回任何产品。
...
InAppPurchaseConnection _iap = InAppPurchaseConnection.instance;
@override
initState() {
_initialize();
super.initState();
}
void _initialize() async {
// Check availability of In App Purchases
_available = await _iap.isAvailable();
if (_available) {
await _getProducts();
await _getPastPurchases();
_getSubscriptionPrice();
}
_subscription = _iap.purchaseUpdatedStream.listen((data) => setState(() {
_purchases.addAll(data);
for(PurchaseDetails purchase in _purchases){
if(purchase.productID == 'subName'){
setState(() {
showSubscriptionDialog = false;
});
}
}
_verifyPurchase();
}));
}
/// Get all products available for sale
Future<void> _getProducts() async {
Set<String> ids = Set.from(['subName']);
ProductDetailsResponse response = await _iap.queryProductDetails(ids);
setState(() {
_products = response.productDetails;
});
if(response.error != null && response.error.message.length > 0){
_iapStoreProblem = response.error.message;
}
}
/// Gets past purchases
Future<void> _getPastPurchases() async {
bool hasSub = false;
QueryPurchaseDetailsResponse response = await _iap.queryPastPurchases();
for (PurchaseDetails purchase in response.pastPurchases) {
if (Platform.isIOS) {
InAppPurchaseConnection.instance.completePurchase(purchase);
}
}
setState(() {
_purchases = response.pastPurchases;
});
for(PurchaseDetails purchase in _purchases){
if(purchase.billingClientPurchase.sku == "subName"){
hasSub = true;
}
}
if(hasSub){
setState(() {
showSubscriptionDialog = false;
firstTimeBuySub = false;
});
}else{
setState(() {
showSubscriptionDialog = true;
firstTimeBuySub = true;
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
616 次 |
| 最近记录: |