Я пытаюсь добавить покупку приложения в свое приложение, следуя описанным здесь методам:
Введение в покупки приложений в учебнике iOS 6
Я добавил продукт через itunes connect, у которого есть идентификатор, подобный этому:
com.mycompany.myapp.myproduct1
Идентификатор пакета (указанный в p-списке, а также в хранилище приложений) настраивается следующим образом:
com.mycompany.myapp
Я использую вспомогательный класс из учебника IAHelper для обработки функциональности покупки (соответствующий код, показанный ниже). Он также имеет подкласс, который по существу используется для добавления идентификатора продукта (ов) в приложении в массив IAHelper идентификаторов продуктов.
Чтобы проверить код, я создал кнопку с надписью "show products", которая вызывает этот метод:
- (IBAction) showProducts {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(productsLoaded:) name:kProductsLoadedNotification object:nil];
Reachability *reach = [Reachability reachabilityForInternetConnection];
NetworkStatus netStatus = [reach currentReachabilityStatus];
if (netStatus == NotReachable) {
NSLog(@"No internet connection!");
} else {
if ([InAppMyAppAPHelper sharedHelper].products == nil) {
// here where it calls the helper class method to request the products
[[InAppMyAppAPHelper sharedHelper] requestProducts];
self.hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
_hud.labelText = @"Loading vocabulary...";
[self performSelector:@selector(timeout:) withObject:nil afterDelay:30.0];
}
}
}
Это метод запроса продуктов iTunesConnect, вызывается выше:
- (void)requestProducts {
self.request = [[[SKProductsRequest alloc] initWithProductIdentifiers:_productIdentifiers] autorelease];
_request.delegate = self;
[_request start];
}
(Обратите внимание, что переменные, которым предшествует "_", относятся к действительным переменным с тем же именем, что и подчеркивание для нескольких выражений синтезатора)
Наконец, это метод (в IAHelper), который получает уведомление при получении ответа:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSLog(@"IAHelper, received products results...");
self.products = response.products;
self.request = nil;
// Here the loop to list the products received
for (id product in _products){
NSLog(@"IAHelper, received product is: %@", product);
}
[[NSNotificationCenter defaultCenter] postNotificationName:kProductsLoadedNotification object:_products];
}
В приведенном выше примере операторы журнала показывают, что метод вызывается, но цикл для печати полученных продуктов не содержит ничего.
Итак, похоже, что он не находит продукт в iTunes connect. Тем не менее, я создал там продукт, и идентификатор продукта совпадает с идентификатором пакета, а также идентификатором продукта, т.е.
bundle id: com.mycompany.myapp
product id: com.mycompany.myapp.product1
Я проверил это несколько раз.
Я заметил, что iTunes перечисляет статус рекламного продукта как "готового к отправке". Есть ли еще один шаг, который я должен сделать, чтобы сделать его доступным?
В целом, что я делаю неправильно?