我已在用户可以购买应用内商品的应用中为商店创建了用户界面。我还希望在用户不必点击购买的情况下显示旁边产品的价格,但无法找到正确的方法。
与此问题非常相似的问题已经回答here。
但上述解决方案需要SKProduct
个对象。这意味着用户必须单击购买按钮,才会调用productsRequest:didReceiveResponse:
方法。只有创建SKProduct
对象后,才能检索有关产品的信息。
我还阅读了Apple文档,它使用了类似的方法。
无论如何在没有用户请求购买的情况下检索产品信息和价格?
答案 0 :(得分:2)
此处有轻微的订购问题 - 您应该在显示用户购买的能力(购买按钮)之前制作SKProductsRequest。这样,您就可以获得价格和其他信息,以便用户做出购买决定。您还将知道您的任何产品是否无效或具有本地化描述。
例如,我有一个列出我所有IAP项目的屏幕。在该视图的初始化阶段,我启动SKProductsRequest。当调用关联的委托时,我会在视图中显示所有项目。
更改流程后,您引用的其他解决方案将为您提供格式化定价,您还可以获取本地化描述。
答案 1 :(得分:1)
是的,您可以在启动应用程序时在appdelegate中发出请求。
创建一个名为getInAppProductDetails
的方法。使用此方法发出请求
-(void)getInAppProductDetails
{
SKProductsRequest *request;
request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObjects:
@"InAppID1",
@"InAppID2,
nil]];
request.delegate = self;
[request start];
}
在发布期间调用上述方法。之后处理你得到的回复
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSArray *myProducts = response.products;
NSMutableDictionary *dictMain = [[NSMutableDictionary alloc]init];
for (int i = 0;i < [myProducts count]; i++)
{
SKProduct *product = [myProducts objectAtIndex:i];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setLocale:product.priceLocale];
NSString *priceString = [numberFormatter stringFromNumber:product.price];
NSString *strTitle = product.localizedTitle;
NSLog(@"Title: %@", product.localizedTitle);
NSLog(@"Desc: %@", product.localizedDescription);
NSLog(@"Price: %@", priceString);
NSLog(@"id : %@",product.productIdentifier);
NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];
[dict setValue:priceString forKey:@"productPrice"];
[dict setValue:strTitle forKey:@"prodcuctTitle"];
[dictMain setObject:dict forKey:product.productIdentifier];
}
[[NSUserDefaults standardUserDefaults] setObject:dictMain forKey:@"products"];
}
在此委托方法中,您可以获得存储在userdefaults
中的每个应用详细信息作为字典供以后使用。
要从字典中获取产品价格,您可以这样做
NSString *str1 = [[dictPriceList valueForKey:@"InAppID1"] valueForKey:@"productPrice"];
NSString *str2 = [[dictPriceList valueForKey:@"InAppID2"] valueForKey:@"productPrice"];