我已经为我的应用实现了应用内购买,但为了遵守 Apple 准则,我需要在我的商店 UI 中格式化和显示产品的本地化货币。当用户点击显示商店 UI 时,我创建了一个 productsRequest
来请求和显示相应产品的信息。问题是它还会为我设置的购买启动购买流程。我想要它做的就是在标签中显示格式化的货币,而不开始购买过程。
用于显示商店 UI 的按钮:
-(void)openIAP
{
if([SKPaymentQueue canMakePayments]){
NSLog(@"User can make payments");
SKProductsRequest *productsRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObjects:kRemoveAdsProductIdentifier, nil]];
productsRequest.delegate = self;
[productsRequest start];
} else {
NSLog(@"User can't make payments, don't open store");
}
}
产品请求
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
SKProduct *validProduct = nil;
int count = [response.products count];
if(count > 0){
validProduct = [response.products objectAtIndex:0];
NSLog(@"Products Available!");
_numberFormatter = [[NSNumberFormatter alloc] init];
[_numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[_numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[_numberFormatter setLocale:validProduct.priceLocale];
NSString *formattedPrice = [_numberFormatter stringFromNumber:validProduct.price];
NSLog(@"The price is %@", formattedPrice);
[adsPrice setString:formattedPrice];
[self purchase:validProduct]; //this needs to be moved
}
else if(!validProduct){
NSLog(@"No products available");
//this is called if your product id is not valid, this shouldn't be called unless that happens.
}
}
我了解此方法的工作原理,但我不知道如何处理 [self purchase:validProduct]
。我尝试使用不同的参数名称创建并调用另一个名为 justProductsRequest
的 SKProductsRequest
方法。它具有与 productsRequest
相同的代码(如上所示)只是没有 [self purchase:validProduct];
但它仍然调用 productsRequest
而不是 justProductsRequest
.
感谢任何帮助。谢谢!
最佳答案
您不应使用产品请求来发起购买。产品请求提供产品信息,例如价格,然后您可以使用这些信息来更新应用程序的 UI。
当您收到 productsRequest:didReceiveResponse:
时,您应该存储收到的产品数组。这包含创建 SKPayment 对象所需的所有 SKProduct 项目。此外,您应该更新您的用户界面以在此处显示您的 IAP 商品的价格(就像您所做的那样)。您应该只需要提出一次此请求。
当你想开始购买流程时(例如,当用户按下一个 IAP 项目的按钮时),在你之前存储的产品数组中通过其标识符找到相关产品,并使用 [SKPayment paymentWithProduct :]
创建支付对象。
In-App Purchase Programming Guide提供了很多重要信息。我所描述的正确购买流程可以在我链接到的页面上的“图 I-1”中看到。
关于ios - 请求产品信息而不实际开始付款流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129549/