StoreKit kullanılarak belgelenmemiş NSURLErrorDomain hata kodları (-1001, -1003 ve -1004)


107

StoreKit ile ilgili kod yazıyorum ve kuyruğa bir satın alma işlemi eklemeye çalıştığımda oldukça rahatsız edici hata kodları alıyorum.

Şimdiye kadar -1003 ve -1004 hata kodlarıyla karşılaştım ve bu kodlar hakkında internette hiçbir şey bulamıyorum.

Bir ürün isteği çalıştırmak geçerli ürün numaraları döndürüyor, bu nedenle çağrıların [[SKPaymentQueue defaultQueue] addPayment:aPayment];bu belgelenmemiş sorunla neden başarısız olacağını bilmiyorum .

Aynı kod, bir cihazda hata olmadan da çalışır, ancak diğerinde çalışmaz.

Sahip olduğum sorular henüz cevaplanmamış:

Bu kodlar ne anlama geliyor? Bu sorunu nasıl hafifletebilirim? Neden ürün talepleri için değil de satın alma denemeleri için oluyorlar?

Yaptığım sorun giderme, bir imzalama sertifikası ve ön hazırlık profilini yeniden oluşturmayı, WiFi ağlarını değiştirmeyi, ilgili tüm yazılımları ve bileşenleri temizlemeyi ve oluşturmayı ve yeniden yüklemeyi içeriyor ve bunların hiçbiri tek tek veya birlikte sorunu çözmeye yardımcı olmadı.

DÜZENLE:

Apple geliştirici forumlarında bununla ilgili bir tartışma bulundu, ancak Apple'dan hiç kimse yanıt vermedi: https://devforums.apple.com/thread/107121?tstart=75 (görüntülemek için iOS geliştirici hesabı gerekir)

DÜZENLE:

Bu açıklanamayan ve aralıklarla ortaya çıkan sorunlar listesine eklemek için bugün -1001 hata koduyla vuruldum. Hala bulabildiğim Apple'ın sorumluluğu yok.

DÜZENLE:

Bu hata kodlarının rastgele oluşturulduğuna dair bir şüphem var ve gerçekten sadece Sandbox'ın çalışmadığını gösteriyor. Bu sorunu yaşayan başka biri var mı?

Yanıtlar:


342

Tüm hata kodları, dokümantasyondaki "CFNetwork Hata Kodları Referansları" ndadır ( bağlantı )

CFURL ve CFURLConnection Hataları için küçük bir ayıklama:

  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
Bunlar, CFNetwork çerçevesi> CFNetworkErrors.h başlığı içindedir.
Tom Pace

1
Bu belge, hataların ne zaman meydana geldiği hakkında daha fazla bilgi içerir: NSURLError ailesi
dokuz taş

Bu sabitler Swift'de derlenmez ama örneğin NSURLErrorUnknownderlenir. Herhangi bir ipucu?
Nicolas Miari

Oh, boşver ... Swift versiyonunu burada
bulun

25

Benzer sorunlarım var, benim durumumda ağ bağlantısıyla ilgili görünüyor:

Hata Etki Alanı = NSURLErrorDomain Kodu = -1001 "İstek zaman aşımına uğradı."

Kontrol edilecek şeyler:

  • Sunucunuzun belirli bir süre içinde yanıt verememe ihtimali var mı? 60 saniye mi, 4 dakika mı?
  • Cihazınızın ağları (WiFi, 3G, VPN) değiştirmesi ihtimali var mı?
  • Birisi (istemci veya sunucu) kimlik doğrulamasını bekliyor olabilir mi?

Üzgünüz, nasıl düzeltileceğine dair bir fikriniz yok. Sadece hata ayıklayarak sorunun ne olduğunu bulmaya çalışıyorum (-1021, -1001, -1009)

Güncelleme: Google arama bunu bulmak için çok nazikti:

  • -1001 TimedOut - belirlenen zaman aşımından daha uzun sürdü.
  • -1003 CannotFindHost - ana bilgisayar bulunamadı.
  • -1004 CannotConnectToHost - ana bilgisayar bağlantı kurmamıza izin vermiyor.

1
"Sunucunuzun belirli bir süre içinde yanıt verememe ihtimali var mı?" Biliyorsunuz, katil bu, bu kodla bağlantı kurmaya çalıştığım Apple'ın sunucusu, yani hıçkırık benim sunucum değil.
Abartma

Hey Jom, iPhone'da bizim için iyi çalışıyor ancak iPad'de bazen çöküyoruz, bu mesaj "-1001 TimedOut" mesajını gösteriyor. Ama sorum şu, eğer TimedOut ise hem iPhone hem de iPad'de gelmeli. Şimdiden teşekkürler @JOM
Babul

21

bkz. NSURLError.h Tanımla

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

Projemde aşağıdaki yöntemi kullanıyorum

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

Sonra sadece hata kodunu kontrol ediyorum ve listede varsa uyarı gösteriyorum

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

Ancak gördüğünüz gibi, NO INTERNET tanımıma uymadığını düşündüğüm kodları yorumladım. Örneğin -1012 kodu (Doğrulama başarısız.) Listeyi istediğiniz gibi düzenleyebilirsiniz.

Projemde kullanıcıdan kullanıcı adı / şifre girerken kullanıyorum. Benim görüşüme göre (fiziksel) ağ bağlantısı hataları, ağ tabanlı uygulamanızda uyarı görünümü göstermenin tek nedeni olabilir. Başka herhangi bir durumda (örn. Yanlış kullanıcı adı / şifre çifti) bazı özel kullanıcı dostu animasyon yapmayı tercih ederim VEYA başarısız denemeyi kullanıcının herhangi bir ilgisi olmadan tekrarlayın. Özellikle kullanıcı açıkça bir ağ araması başlatmadıysa.

Belgelere bağlantı için martinezdelariva'ya saygılarımla.


Bu bir sınıf yöntemi olabilir!
ilnar_al

2

Yukarıda belgelenmeyen yeni bir hata kodu buldum: 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>
Lakshmi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.