Недокументированные коды ошибок NSURLErrorDomain (-1001, -1003 и -1004) с помощью StoreKit
Я пишу код, связанный с StoreKit, и я получаю некоторые довольно тревожные коды ошибок, когда я пытаюсь добавить покупку в очередь.
до сих пор я испытывал коды ошибок -1003 и -1004, и я не могу найти ничего об этих кодах в интернете.
запуск запроса продукта возвращает действительные номера продуктов, поэтому я не знаю, почему звонит в [[SKPaymentQueue defaultQueue] addPayment:aPayment]; не удалось бы с этой недокументированной проблемой.
один и тот же код работает без ошибок на одном устройство, но не на другом.
вопросы, которые у меня есть, пока остаются без ответа:
Что означают эти коды?
Как я могу смягчить эту проблему?
Почему они происходят для попыток покупки, а не для запросов продукта?
Устранение неполадок, которые я сделал, включает в себя регенерацию сертификата подписи и профиля подготовки, изменение сетей WiFi, очистку и сборку и переустановку всего связанного программного обеспечения и компонентов, и ни одна из этих вещей отдельно или вместе помогли решить проблему.
EDIT:
нашел дискуссию об этом на форумах Apple dev, но никто из Apple не ответил: https://devforums.apple.com/thread/107121?tstart=75 (для просмотра требуется учетная запись разработчика iOS)
EDIT:
сегодня я был поражен кодом ошибки -1001, чтобы добавить к этому списку необъяснимых и прерывистых проблем. До сих пор нет отчетности от Apple, что я могу находить.
EDIT:
У меня есть подозрение, что эти коды ошибок генерируются случайным образом и действительно указывают только на то, что песочница не работает. Кто-нибудь еще испытывает эту проблему?
6 ответов:
все коды ошибок находятся в разделе" Ссылки на коды ошибок CFNetwork " в документации (ссылке)
небольшое извлечение для ошибок CFURL и CFURLConnection:
kCFURLErrorUnknown = -998, kCFURLErrorCancelled = -999, kCFURLErrorBadURL = -1000, kCFURLErrorTimedOut = -1001, kCFURLErrorUnsupportedURL = -1002, kCFURLErrorCannotFindHost = -1003, kCFURLErrorCannotConnectToHost = -1004, kCFURLErrorNetworkConnectionLost = -1005, kCFURLErrorDNSLookupFailed = -1006, kCFURLErrorHTTPTooManyRedirects = -1007, kCFURLErrorResourceUnavailable = -1008, kCFURLErrorNotConnectedToInternet = -1009, kCFURLErrorRedirectToNonExistentLocation = -1010, kCFURLErrorBadServerResponse = -1011, kCFURLErrorUserCancelledAuthentication = -1012, kCFURLErrorUserAuthenticationRequired = -1013, kCFURLErrorZeroByteResource = -1014, kCFURLErrorCannotDecodeRawData = -1015, kCFURLErrorCannotDecodeContentData = -1016, kCFURLErrorCannotParseResponse = -1017, kCFURLErrorInternationalRoamingOff = -1018, kCFURLErrorCallIsActive = -1019, kCFURLErrorDataNotAllowed = -1020, kCFURLErrorRequestBodyStreamExhausted = -1021, kCFURLErrorFileDoesNotExist = -1100, kCFURLErrorFileIsDirectory = -1101, kCFURLErrorNoPermissionsToReadFile = -1102, kCFURLErrorDataLengthExceedsMaximum = -1103,
У меня есть подобные проблемы, в моем случае, похоже, связанные с сетевым подключением:
Error Domain=Nsurlerrordomain Code=-1001 " истекло время ожидания запроса."
вещи для проверки:
- есть ли вероятность, что ваш сервер не сможет ответить в течение некоторого срока? Как 60 секунд или 4 минуты?
- есть ли возможность, что ваше устройство переключает сети (WiFi, 3G, VPN)?
- кто-то может (клиент против сервера) ждать аутентификации?
извините, нет идей, как исправить. Просто отладка это, пытаясь выяснить, в чем проблема (-1021, -1001, -1009)
обновление: поиск Google был очень любезен, чтобы найти это:
- -1001 тайм-аут-это заняло больше времени, чем тайм-аут, который был выделен.
- -1003 CannotFindHost-хост не может быть найден.
- -1004 CannotConnectToHost-хост не дали бы нам установить связь.
посмотреть NSURLError.h определить
NSURLErrorUnknown = -1, NSURLErrorCancelled = -999, NSURLErrorBadURL = -1000, NSURLErrorTimedOut = -1001, NSURLErrorUnsupportedURL = -1002, NSURLErrorCannotFindHost = -1003, NSURLErrorCannotConnectToHost = -1004, NSURLErrorNetworkConnectionLost = -1005, NSURLErrorDNSLookupFailed = -1006, NSURLErrorHTTPTooManyRedirects = -1007, NSURLErrorResourceUnavailable = -1008, NSURLErrorNotConnectedToInternet = -1009, NSURLErrorRedirectToNonExistentLocation = -1010, NSURLErrorBadServerResponse = -1011, NSURLErrorUserCancelledAuthentication = -1012, NSURLErrorUserAuthenticationRequired = -1013, NSURLErrorZeroByteResource = -1014, NSURLErrorCannotDecodeRawData = -1015, NSURLErrorCannotDecodeContentData = -1016, NSURLErrorCannotParseResponse = -1017, NSURLErrorAppTransportSecurityRequiresSecureConnection NS_ENUM_AVAILABLE(10_11, 9_0) = -1022, NSURLErrorFileDoesNotExist = -1100, NSURLErrorFileIsDirectory = -1101, NSURLErrorNoPermissionsToReadFile = -1102, NSURLErrorDataLengthExceedsMaximum NS_ENUM_AVAILABLE(10_5, 2_0) = -1103, // SSL errors NSURLErrorSecureConnectionFailed = -1200, NSURLErrorServerCertificateHasBadDate = -1201, NSURLErrorServerCertificateUntrusted = -1202, NSURLErrorServerCertificateHasUnknownRoot = -1203, NSURLErrorServerCertificateNotYetValid = -1204, NSURLErrorClientCertificateRejected = -1205, NSURLErrorClientCertificateRequired = -1206, NSURLErrorCannotLoadFromNetwork = -2000, // Download and file I/O errors NSURLErrorCannotCreateFile = -3000, NSURLErrorCannotOpenFile = -3001, NSURLErrorCannotCloseFile = -3002, NSURLErrorCannotWriteToFile = -3003, NSURLErrorCannotRemoveFile = -3004, NSURLErrorCannotMoveFile = -3005, NSURLErrorDownloadDecodingFailedMidStream = -3006, NSURLErrorDownloadDecodingFailedToComplete =-3007, NSURLErrorInternationalRoamingOff NS_ENUM_AVAILABLE(10_7, 3_0) = -1018, NSURLErrorCallIsActive NS_ENUM_AVAILABLE(10_7, 3_0) = -1019, NSURLErrorDataNotAllowed NS_ENUM_AVAILABLE(10_7, 3_0) = -1020, NSURLErrorRequestBodyStreamExhausted NS_ENUM_AVAILABLE(10_7, 3_0) = -1021, NSURLErrorBackgroundSessionRequiresSharedContainer NS_ENUM_AVAILABLE(10_10, 8_0) = -995, NSURLErrorBackgroundSessionInUseByAnotherProcess NS_ENUM_AVAILABLE(10_10, 8_0) = -996, NSURLErrorBackgroundSessionWasDisconnected NS_ENUM_AVAILABLE(10_10, 8_0)= -997,
Я использую следующий метод в моем проекте
-(NSArray*)networkErrorCodes { static NSArray *codesArray; if (![codesArray count]){ @synchronized(self){ const int codes[] = { //kCFURLErrorUnknown, //-998 //kCFURLErrorCancelled, //-999 //kCFURLErrorBadURL, //-1000 //kCFURLErrorTimedOut, //-1001 //kCFURLErrorUnsupportedURL, //-1002 //kCFURLErrorCannotFindHost, //-1003 kCFURLErrorCannotConnectToHost, //-1004 kCFURLErrorNetworkConnectionLost, //-1005 kCFURLErrorDNSLookupFailed, //-1006 //kCFURLErrorHTTPTooManyRedirects, //-1007 kCFURLErrorResourceUnavailable, //-1008 kCFURLErrorNotConnectedToInternet, //-1009 //kCFURLErrorRedirectToNonExistentLocation, //-1010 kCFURLErrorBadServerResponse, //-1011 //kCFURLErrorUserCancelledAuthentication, //-1012 //kCFURLErrorUserAuthenticationRequired, //-1013 //kCFURLErrorZeroByteResource, //-1014 //kCFURLErrorCannotDecodeRawData, //-1015 //kCFURLErrorCannotDecodeContentData, //-1016 //kCFURLErrorCannotParseResponse, //-1017 kCFURLErrorInternationalRoamingOff, //-1018 kCFURLErrorCallIsActive, //-1019 //kCFURLErrorDataNotAllowed, //-1020 //kCFURLErrorRequestBodyStreamExhausted, //-1021 kCFURLErrorFileDoesNotExist, //-1100 //kCFURLErrorFileIsDirectory, //-1101 kCFURLErrorNoPermissionsToReadFile, //-1102 //kCFURLErrorDataLengthExceedsMaximum, //-1103 }; int size = sizeof(codes)/sizeof(int); NSMutableArray *array = [[NSMutableArray alloc] init]; for (int i=0;i<size;++i){ [array addObject:[NSNumber numberWithInt:codes[i]]]; } codesArray = [array copy]; } } return codesArray; }тогда я просто проверить код ошибки и показать предупреждение, если он находится в списке
if ([[self networkErrorCodes] containsObject:[NSNumber numberWithInt:[error code]]]){ // Fire Alert View Here }но, как вы можете видеть, я прокомментировал коды, которые я думаю, не соответствует моему определению нет интернета. Например, код -1012 (ошибка аутентификации.) Вы можете редактировать список, как вам нравится.
в моем проекте я использую его на имени пользователя/пароля пользователя. И на мой взгляд (физические) ошибки сетевого подключения могут быть единственная причина, чтобы показать вид оповещения в вашем сетевом приложении. В любом другом случае (например, неверная пара имя пользователя/пароль) я предпочитаю делать некоторые пользовательские дружественные анимации, или просто повторить неудачную попытку снова без какого-либо внимания пользователя. Особенно если пользователь явно не инициировал сетевой вызов.
С уважением к martinezdelariva для ссылки на документацию.
Я нашел эту страницу в документации, которая имеет перечисление objective-c для всех кодов ошибок под NSURLErrorDomain.
Я нашел новый код ошибки, которая не описана выше: CFNetworkErrorCode -1022
Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection."
Comments