Kode kesalahan NSURLErrorDomain tidak berdokumen (-1001, -1003 dan -1004) menggunakan StoreKit

107

Saya sedang menulis kode terkait StoreKit, dan saya mendapatkan beberapa kode kesalahan yang agak mengganggu ketika saya mencoba menambahkan pembelian ke antrian.

Sejauh ini, saya mengalami kode kesalahan -1003 dan -1004 dan saya tidak dapat menemukan apa pun tentang kode tersebut di internet.

Menjalankan permintaan produk akan mengembalikan nomor produk yang valid, jadi saya tidak tahu mengapa panggilan ke [[SKPaymentQueue defaultQueue] addPayment:aPayment];akan gagal dengan masalah yang tidak terdokumentasi ini.

Kode yang sama juga berfungsi tanpa kesalahan di satu perangkat tetapi tidak di perangkat lain.

Pertanyaan yang saya miliki, sampai saat ini, belum terjawab:

Apa arti kode-kode ini? Bagaimana cara mengurangi masalah ini? Mengapa ini terjadi untuk upaya pembelian dan bukan untuk permintaan produk?

Pemecahan masalah yang telah saya lakukan termasuk membuat ulang sertifikat penandatanganan dan profil penyediaan, mengubah jaringan WiFi, membersihkan dan membuat serta menginstal ulang semua perangkat lunak dan komponen terkait, dan tidak satu pun dari hal-hal ini secara individual atau bersama-sama yang membantu memperbaiki masalah.

EDIT:

Menemukan diskusi tentang ini di forum pengembang Apple, tetapi tidak ada seorang pun dari Apple yang menanggapi: https://devforums.apple.com/thread/107121?tstart=75 (akun pengembang iOS diperlukan untuk melihat)

EDIT:

Saya dipukul dengan kode kesalahan -1001 hari ini, untuk menambah daftar masalah yang tidak bisa dijelaskan dan terputus-putus ini. Masih belum ada pertanggungjawaban dari Apple, yang bisa saya temukan.

EDIT:

Saya memiliki kecurigaan bahwa kode kesalahan ini dibuat secara acak dan benar-benar hanya menunjukkan bahwa Kotak Pasir sedang mati. Ada lagi yang mengalami masalah ini?

Hiperbola
sumber

Jawaban:

342

Semua kode kesalahan ada di "Referensi Kode Kesalahan CFNetwork" di dokumentasi ( tautan )

Ekstraksi kecil untuk Kesalahan CFURL dan 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,
martinezdelariva.dll
sumber
2
Ini berada dalam kerangka CFNetwork> header CFNetworkErrors.h.
Tom Pace
1
Dokumen ini memiliki info lebih lanjut tentang kapan kesalahan terjadi: NSURLError family
nine stones
Konstanta ini tidak dapat dikompilasi di Swift, tetapi mis NSURLErrorUnknown. Ada petunjuk?
Nicolas Miari
Oh, sudahlah ... temukan versi Swift di sini: developer.apple.com/library/mac/documentation/Networking/…
Nicolas Miari
25

Saya memiliki masalah serupa, dalam kasus saya tampaknya terkait dengan konektivitas jaringan:

Domain Kesalahan = NSURLErrorDomain Code = -1001 "Permintaan habis waktunya."

Hal-hal yang perlu diperiksa:

  • Adakah kemungkinan server Anda tidak dapat merespons dalam beberapa batas waktu? Seperti 60 detik atau 4 menit?
  • Apakah ada kemungkinan perangkat Anda berpindah jaringan (WiFi, 3G, VPN)?
  • Bisakah seseorang (klien vs. server) menunggu otentikasi?

Maaf, tidak ada ide bagaimana memperbaikinya. Hanya men-debug ini, mencoba mencari tahu apa masalahnya (-1021, -1001, -1009)

Pembaruan: Pencarian Google sangat baik untuk menemukan ini:

  • -1001 TimedOut - butuh waktu lebih lama dari waktu tunggu yang ditentukan.
  • -1003 CannotFindHost - host tidak dapat ditemukan.
  • -1004 CannotConnectToHost - host tidak mengizinkan kami membuat sambungan.
JOM
sumber
1
"Apakah ada kemungkinan server Anda tidak dapat merespons dalam beberapa batas waktu?" Anda tahu, itulah pembunuhnya, itu server Apple yang saya coba hubungi dengan kode ini, jadi bukan server saya yang cegukan.
Hiperbola
Hai Jom, Di iPhone ini berfungsi dengan baik untuk kami, tetapi di iPad kami terkadang mengalami crash, pesan ini menunjukkan pesan "-1001 TimedOut". Tapi pertanyaan saya adalah, Jika TimedOut harus ada di iPhone dan iPad. Thanks in Advance @JOM
Babul
21

lihat NSURLError.h Define

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,
Acorld
sumber
3

Saya menggunakan metode berikut dalam proyek saya

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

Kemudian saya hanya memeriksa kode kesalahan dan menunjukkan peringatan jika ada dalam daftar

if ([[self networkErrorCodes] containsObject:[NSNumber
numberWithInt:[error code]]]){ 
// Fire Alert View Here
}

Tetapi seperti yang Anda lihat, saya mengomentari kode yang menurut saya tidak sesuai dengan definisi saya tentang NO INTERNET. Misalnya kode -1012 (Otentikasi gagal.) Anda dapat mengedit daftar sesuka Anda.

Dalam proyek saya, saya menggunakannya di nama pengguna / kata sandi yang masuk dari pengguna. Dan dalam pandangan saya (fisik) kesalahan koneksi jaringan bisa menjadi satu-satunya alasan untuk menampilkan tampilan peringatan di aplikasi berbasis jaringan Anda. Dalam kasus lain (mis. Pasangan nama pengguna / kata sandi salah) Saya lebih suka melakukan beberapa animasi ramah pengguna khusus, ATAU hanya mengulangi upaya yang gagal lagi tanpa perhatian pengguna. Terutama jika pengguna tidak secara eksplisit memulai panggilan jaringan.

Salam martinezdelariva untuk link ke dokumentasi.

ilnar_al
sumber
Itu bisa menjadi metode kelas!
ilnar_al
2

Saya menemukan kode kesalahan baru yang tidak didokumentasikan di atas: 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."
ben
sumber
forums.developer.apple.com/thread/5835 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
Lakshmi