Я пытаюсь добавить встроенную покупку в мое приложение, следуя методам, описанным здесь :
Введение в встроенные покупки в iOS 6 Учебник
Я добавил продукт через itunes connect, у которого есть id, установленный следующим образом:
com.mycompany.myapp.myproduct1
Идентификатор пакета (указанный в списке p-list, а также в магазине приложений) установлен следующим образом:
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's 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];
}
(Обратите внимание, что переменные, которым предшествует "_", относятся к фактическим одноименным переменным без подчеркивания в нескольких операторах synthesize)
Наконец, это метод (в IAHelper), который получает уведомление, когда ответ получен:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSLog(@"IAHelper, received products results...");
self.products = response.products;
self.request = nil;
// Here's 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. Тем не менее, я установил там продукт, и id продукта совпадает с id пакета, плюс идентификатор продукта, т.е.
bundle id: com.mycompany.myapp
product id: com.mycompany.myapp.product1
Я проверял это несколько раз.
Я заметил, что в iTunes статус рекламного продукта указан как "готов к отправке". Есть ли дополнительный шаг, который я должен сделать, чтобы сделать его доступным?
В целом, что я делаю неправильно?