2015-02-17 4 views
0

Я создал пользовательский интерфейс для магазина в своем приложении, где пользователи могут приобретать продукты в приложении. Я также хочу показать цену продукта рядом с ним без необходимости покупки клиентом, но не может найти правильный способ сделать это.iOS - Показать цену товара в правильной валюте до ее запроса пользователем?

Вопрос, очень похожий на этот был дан ответ here.

Для решения выше требуется объект SKProduct. Это означает, что пользователь должен нажать кнопку покупки, и будет вызван метод productsRequest:didReceiveResponse:. Только после создания объекта SKProduct я могу получить информацию о продукте.

Я также прочитал документацию Apple и использует аналогичный метод.

Есть ли способ получить информацию о продукте и цену без предварительной заявки на покупку?

+0

Вам не нужно просить о покупке для получения информации о продукте. Вам просто нужно запросить productData и сделать запрос, он вызовет делегата и предоставит вам необходимую информацию, он не инициирует оплату или покупку. –

ответ

2

Незначительный заказ здесь - вы должны сделать SKProductsRequest перед тем, как отобразить возможность покупки пользователем (кнопка покупки). Таким образом, у вас есть цена и другая информация, позволяющая пользователю принять решение о покупке. Вы также узнаете, являются ли какие-либо из ваших продуктов недействительными или имеют локализованные описания.

Например, у меня есть экран, в котором перечислены все мои пункты IAP. На этапе инициализации для этой точки зрения я запускаю SKProductsRequest. Я отображу все элементы в представлении, когда вызван связанный делегат.

Как только вы измените поток, тогда другое решение, на которое вы ссылаетесь, даст вам форматированную цену, а также вы сможете получить локализованные описания.

+0

Моя логика может быть отключена, но мне нужно, чтобы более одного ViewController был делегатом, поскольку в одном я бы переопределил productsRequest: didReceiveResponse: вернуть информацию, а в другой - переопределить productsRequest: didReceiveResponse: обрабатывать покупку? В настоящее время у меня есть только один ViewController в моем приложении. – aanrv

+0

(Я использую SpriteKit). – aanrv

+0

Вы переопределите productsRequest: didReceiveResponse, чтобы получить информацию и реализовать SKPaymentTransactionObserver paymentQueue: updatedTransactions, чтобы получить уведомление о фактической покупке. – DrC

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"]; 
+0

В моем приложении есть только один контроллер представления, а остальные - SKScenes (SpriteKit). В вашем коде вы переопределяете productsRequest: didReceiveResponse: для сбора информации о продукте.Означает ли это, что мне нужен другой контроллер представлений, который будет делегатом, который переопределяет productsRequest: didReceiveResponse: обрабатывать запрос на покупку? – aanrv