iOS - 在用户请求之前以适当的货币显示产品价格?

时间:2015-02-17 04:38:53

标签: ios objective-c in-app-purchase storekit

我已在用户可以购买应用内商品的应用中为商店创建了用户界面。我还希望在用户不必点击购买的情况下显示旁边产品的价格,但无法找到正确的方法。

与此问题非常相似的问题已经回答here

但上述解决方案需要SKProduct个对象。这意味着用户必须单击购买按钮,才会调用productsRequest:didReceiveResponse:方法。只有创建SKProduct对象后,才能检索有关产品的信息。

我还阅读了Apple文档,它使用了类似的方法。

无论如何在没有用户请求购买的情况下检索产品信息和价格?

2 个答案:

答案 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"];