StoreKit 관련 코드를 작성 중이며 구매를 대기열에 추가하려고 할 때 다소 문제가되는 오류 코드가 표시됩니다.
지금까지 오류 코드 -1003 및 -1004가 발생했으며 인터넷에서 해당 코드에 대해 아무것도 찾을 수 없습니다.
제품 요청을 실행하면 유효한 제품 번호가 반환 [[SKPaymentQueue defaultQueue] addPayment:aPayment];
되므로이 문서화되지 않은 문제로 인해 호출 이 실패하는 이유를 모르겠습니다 .
동일한 코드가 한 장치에서는 오류없이 작동하지만 다른 장치에서는 작동하지 않습니다.
내가 가진 질문은 아직 답이 없습니다.
이 코드는 무엇을 의미합니까? 이 문제를 어떻게 완화 할 수 있습니까? 제품 요청이 아닌 구매 시도에 대해 발생하는 이유는 무엇입니까?
내가 한 문제 해결에는 서명 인증서 및 프로비저닝 프로파일 재생성, WiFi 네트워크 변경, 모든 관련 소프트웨어 및 구성 요소 정리 및 구축 및 재설치가 포함되며 이러한 사항 중 어느 것도 개별적으로 또는 함께 문제를 해결하는 데 도움이되지 않았습니다.
편집하다:
Apple 개발자 포럼에서 이에 대한 토론을 찾았지만 Apple의 아무도 응답하지 않았습니다. https://devforums.apple.com/thread/107121?tstart=75 (보기하려면 iOS 개발자 계정 필요)
편집하다:
설명 할 수없고 간헐적 인 문제 목록에 추가하기 위해 오늘 오류 코드 -1001이 발생했습니다. 여전히 Apple의 책임이 없습니다.
편집하다:
이 오류 코드가 무작위로 생성되고 실제로 Sandbox가 다운되었음을 나타냅니다. 다른 사람이이 문제를 경험합니까?
답변
모든 오류 코드는 문서 ( 링크 )의 “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,
답변
비슷한 문제가 있습니다. 제 경우에는 네트워크 연결과 관련된 것 같습니다.
오류 도메인 = NSURLErrorDomain 코드 = -1001 “요청 시간이 초과되었습니다.”
확인해야 할 사항 :
- 서버가 일정 시간 내에 응답하지 못할 가능성이 있습니까? 60 초 또는 4 분?
- 장치가 네트워크 (WiFi, 3G, VPN)를 전환 할 가능성이 있습니까?
- 누군가 (클라이언트 대 서버)가 인증을 기다리고있을 수 있습니까?
죄송합니다. 해결 방법이 없습니다. 이것을 디버깅하고 문제가 무엇인지 알아 내려고 노력합니다 (-1021, -1001, -1009).
업데이트 : Google 검색은 매우 친절했습니다.
- -1001 TimedOut-할당 된 시간 초과보다 오래 걸렸습니다.
- -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와 관련이 있습니다.
답변
위에 설명되지 않은 새 오류 코드를 찾았습니다. 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."
답변
NSURLErrorDomain 아래의 모든 오류 코드에 대한 object-c 열거 형이있는 설명서에서이 페이지를 찾았습니다.