В разговоре WWDC 2013 о приёме квитанций о приеме приложений рекомендуется, чтобы в приложениях для iOS, код подтверждения получения должен быть вызван как можно скорее. Еще до application:didFinishLaunchingWithOptions:
- то есть в функции main()
. Я полагаю, что так это будет работать следующим образом:Можно ли вызвать SKReceiptRefreshRequest из main()?
int main(int argc, char *argv[]) {
@autoreleasepool {
validateReceiptMethod(); // <---- HERE
int retVal = UIApplicationMain(argc, argv, nil, nil);
return retVal;
}
}
Идея заключается в том, что метод UIApplicationMain()
является то, что запускает приложение и называет application:didFinishLaunchingWithOptions:
. Если вы положите validateReceiptMethod()
после UIApplciationMain()
, он никогда не запустится.
В любом случае, это отлично работает. Но что, если нет квитанции? Затем вам нужно позвонить SKReceiptRefreshRequest
, чтобы получить новый магазин приложений, и это нормально. Но если вы запустите этот код до UIApplciationMain()
, он также будет запущен до отображения любого вашего пользовательского интерфейса. Итак, что будет с точки зрения отображения пользователя диалогового окна входа в ID? Можно ли даже позвонить по телефону SKReceiptRefreshRequest
из метода main()
?
Это хорошая идея. 'validateReceiptMethod()' может возвращать INT на основе того, что происходит (например, 0, если квитанция недействительна, 1, если она действительна, -1, если получение не найдено). Есть ли простой способ передать эту возвращаемую переменную из main() в 'application: doneFinishLaunchingWithOptions:', так что когда этот метод будет вызван, он будет знать (без необходимости повторной проверки квитанции), что нет квитанции и, следовательно, он должен называть «SKReceiptRefreshRequest» и получать новый? – Jason