Как проверить 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.