Как проверить IAP (покупка в приложении) в iOS Simulator OR на устройстве?

Я внедрил простой механизм для покупки в приложении, следуя учебной книге Ray Wenderlich.

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

self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
_productsRequest.delegate = self;
[_productsRequest start];

Создается SKProductRequest. У него есть адрес памяти, но больше ничего не происходит. Ни один из методов делегата не вызван:

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
    NSLog(@"Product info received...");
    NSArray *products = response.products;
    for (SKProduct *product in products) {
        NSLog(@"ID: %@, title:%@, (%f)", product.productIdentifier, product.localizedTitle, product.price.floatValue);
    }

    self.productsRequest = nil;
}

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
    NSLog(@"Failed to load list of products");
    self.productsRequest = nil;
}

Я дважды проверил:

  • Приложение полностью настроено в iTunes Connect.
  • Статус приложения в ИТЦ - "Подготовка к загрузке"
  • Добавлен один неиспользуемый IAP.
  • Статус продукта IAP в ИТЦ "готов к отправке"
  • Идентификатор приложения - com.mycompany.myapp как для приложения, так и в plist. Проверено дважды.
  • IAP использует com.mycompany.myapp.productname(используя тот же идентификатор для запроса).
  • Создал тестовую учетную запись пользователя в ИТЦ.
  • Пока ничего не отправлено в Apple.
  • У моего Mac есть доступ в Интернет.
  • Других сообщений в консоли или на экране нет.

В книге Рея Вендерли не упоминается, что я должен сделать что-нибудь еще помимо этого.

Только один раз я увидел -didFailWithError: вызов моему делегату на устройстве, но он больше не появлялся. Мой делегат не вызывается как на устройстве, так и на симуляторе. Я позволяю ему работать в течение нескольких минут без какого-либо ответа.

iTunes Connect дает это запутанное предупреждение:

Ваши первые покупки (-ы) в приложении должны быть отправлены с новым приложением версия. Выберите их из раздела "Покупки в приложении" в версии Страница сведений, а затем нажмите "Готово для загрузки двоичных файлов".

Требуется ли это, прежде чем тестировать покупки в приложении?

Ответы

Ответ 1

В текущей версии Xcode 5.0 (5A1413) покупки In-App не будут работать в симуляторе iOS.

StoreKit (покупки в приложении) не будет работать в симуляторе. 13962338

Источник: примечания к выпуску Xcode 5.0 > Известные проблемы > iOS Simulator https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/xc5_release_notes/xc5_release_notes.html#//apple_ref/doc/uid/TP40001051-CH2-SW303

Ответ 2

В документации симулятора iOS написано:

Ограничения API

В iOS Simulator существуют некоторые ограничения для API и функции, в том числе:

Apple Push Services
Privacy alerts for access to Photos, Contacts, Calendar, and Reminders
The UIBackgroundModes key
iCloud document syncing and key-value storage support

Неподдерживаемые фреймворки включают:

External Accessory
Media Player
Message UI 
Event Kit
In UIKit, the UIVideoEditorController class
Store Kit

Как для покупки приложений в магазине Store Kit для работы, так и для рамки Store Kit не поддерживается для Simulator, вы не можете тестировать IAP в iOS Simulator.

Дополнительная информация: Документация симулятора iOS

Ответ 3

К сожалению, есть несколько вещей, которые вы не можете проверить на симуляторе. В App Purchase принадлежит этот список.

Таким образом, вы не можете тестировать в App Purchase в симуляторе, для этого вам нужно устройство iOS.

Изменить:. Насколько я вижу, это происходит, когда вы пытаетесь протестировать IAP на симуляторе, покупка делегатов не будет вызвана.

Ответ 4

Я понял что-то:

Я начал SKProductRequest сразу в конце AppDelegate -didFinishLaunching... и он никогда не работал.

Затем я сделал отложенный вызов и ждал 3 секунды. С этого момента он начал работать. Таким образом, вы не можете делать запросы StoreKit сразу после запуска приложения.

Ответ 5

Где объявлен ваш объект skProductRequest? Попробуйте глобальное объявление skProductRequest.