Хорошо, это может быть пистолет для курения -
Согласно официальному потоку данных из приложений Store Kit, вы должны получить информацию о доступных покупках (SKProductsRequest), прежде чем пытаться совершить покупку (SKPaymentQueue).
Для этого я добавил код, хотя локализованные данные не использовались.Я позвонил, убедился, что товар присутствует, и просто сбросил NSLOG об этом.
Покупка прошла без ошибок!
Затем я удалил код, который называется SKProductsRequest, иперезапустил его и получил сообщение об ошибке «Запросы на оплату ограничены ...».
Похоже, что структура набора магазина была изменена таким образом, что ТРЕБУЕТСЯ сделать вызов SKProductsRequest, для того, чтобы покупки работали правильно, когда они добавляются в SKPaymentQueue.
В компьютерной науке они, похоже, вводят жесткую зависимость между двумя логически связанными, но отдельными модулями.Это ДЕЙСТВИТЕЛЬНО плохая практика.
Попробуйте добавить этот код в свое приложение и в какой-то момент вызовите dumpProductInfo, прежде чем совершать «реальные» вызовы SKPaymentQueue и посмотрите, начнет ли он работать - обязательно обновите встроенныйстроковый литерал с вашими фактическими идентификаторами продукта.
-(void) dumpProductInfo
{
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"com.company.domain.app.purchase"]];
request.delegate = self;
[request start];
}
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSArray *myProduct = response.products;
// populate UI
NSLog(@"Products:");
for (int i = 0; i < [myProduct count]; i++)
{
SKProduct *product = [myProduct objectAtIndex:i];
NSLog(@"Name: %@ - Price: %f ID: %@" ,
[product localizedTitle],
[[product price] doubleValue],
[product productIdentifier]);
}
}
Последующие действия: как упоминалось ниже, Техническое примечание Apple QA1691 подтверждает, что то, что я думал, происходило правильно - через две недели после того, как мы выяснили это: р