รหัสข้อผิดพลาด NSURLErrorDomain ที่ไม่มีเอกสาร (-1001, -1003 และ -1004) โดยใช้ StoreKit


107

ฉันกำลังเขียนรหัสที่เกี่ยวข้องกับ StoreKit และฉันได้รับรหัสข้อผิดพลาดที่ค่อนข้างหนักใจเมื่อพยายามเพิ่มการซื้อลงในคิว

จนถึงตอนนี้ฉันพบรหัสข้อผิดพลาด -1003 และ -1004 และฉันไม่พบอะไรเกี่ยวกับรหัสเหล่านั้นบนอินเทอร์เน็ต

การเรียกใช้คำขอผลิตภัณฑ์จะส่งคืนหมายเลขผลิตภัณฑ์ที่ถูกต้องดังนั้นฉันจึงไม่ทราบว่าเหตุใดการโทรถึง[[SKPaymentQueue defaultQueue] addPayment:aPayment];จึงล้มเหลวด้วยปัญหาที่ไม่มีเอกสารนี้

รหัสเดียวกันยังใช้งานได้โดยไม่มีข้อผิดพลาดในอุปกรณ์เครื่องหนึ่ง แต่ไม่เกิดขึ้นกับอีกเครื่องหนึ่ง

คำถามที่ฉันมีในขณะนี้ยังไม่มีคำตอบ:

รหัสเหล่านี้หมายถึงอะไร? ฉันจะบรรเทาปัญหานี้ได้อย่างไร? เหตุใดจึงเกิดขึ้นเพื่อพยายามซื้อไม่ใช่เพื่อการร้องขอผลิตภัณฑ์

การแก้ไขปัญหาที่ฉันได้ทำรวมถึงการสร้างใบรับรองการลงนามและโปรไฟล์การจัดเตรียมใหม่การเปลี่ยนเครือข่าย WiFi การทำความสะอาดและการสร้างและติดตั้งซอฟต์แวร์และส่วนประกอบที่เกี่ยวข้องทั้งหมดใหม่และไม่มีสิ่งเหล่านี้แยกกันหรือร่วมกันช่วยแก้ไขปัญหาได้

แก้ไข:

พบการสนทนาเกี่ยวกับเรื่องนี้ในฟอรัมนักพัฒนาของApple แต่ไม่มีใครตอบกลับจาก Apple: https://devforums.apple.com/thread/107121?tstart=75 (จำเป็นต้องดูบัญชีนักพัฒนา iOS)

แก้ไข:

วันนี้ฉันได้รับรหัสข้อผิดพลาด -1001 เพื่อเพิ่มลงในรายการปัญหาที่อธิบายไม่ได้และไม่ต่อเนื่อง ยังไม่มีความรับผิดชอบจาก Apple ที่ฉันสามารถพบได้

แก้ไข:

ฉันสงสัยว่ารหัสข้อผิดพลาดเหล่านี้สร้างขึ้นแบบสุ่มและระบุว่า Sandbox ไม่ทำงานจริงๆ มีใครประสบปัญหานี้อีกไหม

คำตอบ:


342

รหัสข้อผิดพลาดทั้งหมดอยู่ใน "การอ้างอิงรหัสข้อผิดพลาดของเครือข่าย CFNetwork" บนเอกสารประกอบ ( ลิงค์ )

การแยกขนาดเล็กสำหรับข้อผิดพลาดในการเชื่อมต่อ CFURL และ CFURLC:

  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,

2
สิ่งเหล่านี้อยู่ในกรอบงาน CFNetwork> ส่วนหัว CFNetworkErrors.h
Tom Pace

1
เอกสารนี้มีข้อมูลเพิ่มเติมเกี่ยวกับเมื่อเกิดข้อผิดพลาด: NSURLError family
Nine stone

ค่าคงที่เหล่านี้ไม่ได้รวบรวมใน Swift แต่เช่นNSURLErrorUnknownนั้น เบาะแสใด ๆ ?
Nicolas Miari

ไม่เป็นไร ... พบเวอร์ชัน Swift ได้ที่นี่: developer.apple.com/library/mac/documentation/Networking/…
Nicolas Miari

25

ฉันมีปัญหาที่คล้ายกันในกรณีของฉันดูเหมือนจะเกี่ยวข้องกับการเชื่อมต่อเครือข่าย:

Error Domain = NSURLErrorDomain Code = -1001 "การร้องขอหมดเวลา"

สิ่งที่ต้องตรวจสอบ:

  • มีโอกาสหรือไม่ที่เซิร์ฟเวอร์ของคุณไม่สามารถตอบสนองได้ภายในเวลาที่กำหนด? เช่น 60 วินาทีหรือ 4 นาที?
  • มีความเป็นไปได้หรือไม่ที่อุปกรณ์ของคุณกำลังเปลี่ยนเครือข่าย (WiFi, 3G, VPN)
  • มีใครบางคน (ไคลเอนต์เทียบกับเซิร์ฟเวอร์) กำลังรอการตรวจสอบสิทธิ์อยู่หรือไม่?

ขออภัยไม่มีไอเดียในการแก้ไข เพียงแค่แก้จุดบกพร่องนี้พยายามค้นหาว่าปัญหาคืออะไร (-1021, -1001, -1009)

อัปเดต:ค้นหาของ Google เป็นสิ่งที่ดีมากที่พบสิ่งนี้:

  • -1001 TimedOut - ใช้เวลานานกว่าการหมดเวลาที่กำหนดไว้
  • -1003 CannotFindHost - ไม่พบโฮสต์
  • -1004 CannotConnectToHost - โฮสต์ไม่ยอมให้เราสร้างการเชื่อมต่อ

1
"มีโอกาสหรือไม่ที่เซิร์ฟเวอร์ของคุณไม่สามารถตอบสนองได้ภายในเวลาที่กำหนด" คุณรู้ไหมว่านั่นคือฆาตกรเป็นเซิร์ฟเวอร์ของ Apple ที่ฉันพยายามติดต่อด้วยรหัสนี้จึงไม่ใช่เซิร์ฟเวอร์ของฉันที่กำลังสะอึก
Hyperbole

เฮ้ Jom ใน iPhone มันใช้งานได้ดีสำหรับเรา แต่ใน iPad บางครั้งเราเกิดปัญหาขึ้นข้อความนี้จะแสดงข้อความ "-1001 TimedOut" แต่คำถามของฉันคือถ้า TimedOut ควรมาทั้งใน iPhone และ iPad ขอบคุณล่วงหน้า @JOM
Babul

21

ดู 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,

3

ฉันใช้วิธีการต่อไปนี้ในโครงการของฉัน

-(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
}

แต่อย่างที่คุณเห็นฉันแสดงความคิดเห็นเกี่ยวกับรหัสที่ฉันคิดว่าไม่เหมาะกับคำจำกัดความของฉันที่ว่า NO INTERNET เช่นรหัสของ -1012 (การพิสูจน์ตัวตนล้มเหลว) คุณสามารถแก้ไขรายการได้ตามต้องการ

ในโครงการของฉันฉันใช้ที่ชื่อผู้ใช้ / รหัสผ่านที่เข้ามาจากผู้ใช้ และในมุมมองของฉัน (ทางกายภาพ) ข้อผิดพลาดในการเชื่อมต่อเครือข่ายอาจเป็นเหตุผลเดียวที่จะแสดงมุมมองการแจ้งเตือนในแอปที่ใช้เครือข่ายของคุณ ในกรณีอื่น ๆ (เช่นคู่ชื่อผู้ใช้ / รหัสผ่านที่ไม่ถูกต้อง) ฉันต้องการสร้างแอนิเมชั่นที่เป็นมิตรกับผู้ใช้แบบกำหนดเองหรือเพียงแค่ทำซ้ำความพยายามที่ล้มเหลวอีกครั้งโดยไม่สนใจผู้ใช้ โดยเฉพาะอย่างยิ่งหากผู้ใช้ไม่ได้เริ่มต้นการโทรผ่านเครือข่ายอย่างชัดเจน

ขอแสดงความนับถือ martinezdelariva สำหรับลิงก์ไปยังเอกสาร


นั่นอาจเป็นวิธีการเรียน!
ilnar_al

2

ฉันพบรหัสข้อผิดพลาดใหม่ซึ่งไม่มีเอกสารข้างต้น: 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."

forums.developer.apple.com/thread/5835 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
ลักษมี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.