Mencoba menjalankan aplikasi saya yang ada di iOS9 tetapi mendapatkan kegagalan saat menggunakan AFURLSessionManager
.
__block NSURLSessionDataTask *task = [self.sessionManager dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
if (error) {
} else {
}
}];
[task resume];
Saya mendapatkan kesalahan berikut:
Error Domain=NSURLErrorDomain Code=-999 "cancelled.
Juga mendapatkan log berikut:
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824
CFNetwork SSLHandshake failed (-9824)
Pembaruan: Saya telah menambahkan beberapa pembaruan ke solusi saya: NSURLSession / NSURLConnection HTTP load gagal di iOS 9
ios
afnetworking
nsurlsession
ios9
tls1.2
Tariq
sumber
sumber
Jawaban:
Solusi yang ditemukan:
Di iOS9, ATS memberlakukan praktik terbaik selama panggilan jaringan, termasuk penggunaan HTTPS.
Dari dokumentasi Apple:
ATS mencegah pengungkapan yang tidak disengaja, memberikan perilaku default yang aman, dan mudah diadopsi. Anda harus mengadopsi ATS sesegera mungkin, terlepas dari apakah Anda membuat aplikasi baru atau memperbarui yang sudah ada. Jika Anda mengembangkan aplikasi baru, Anda harus menggunakan HTTPS secara eksklusif. Jika Anda memiliki aplikasi yang sudah ada, Anda harus menggunakan HTTPS sebanyak yang Anda bisa saat ini, dan membuat rencana untuk memigrasikan sisa aplikasi Anda sesegera mungkin.
Dalam beta 1, saat ini tidak ada cara untuk mendefinisikan ini di info.plist. Solusi adalah menambahkannya secara manual:
Pembaruan1: Ini adalah solusi sementara sampai Anda siap untuk mengadopsi dukungan iOS9 ATS.
Pembaruan2: Untuk lebih jelasnya silakan lihat tautan berikut: http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/
Pembaruan3: Jika Anda mencoba untuk terhubung ke host (YOURHOST.COM) yang hanya memiliki TLS 1.0
Tambahkan ini ke Info.plist aplikasi Anda
sumber
NSTemporaryExceptionMinimumTLSVersion
harus mis. TLSv1.0 bukannya 1.0 , lihat NSAppTransportSecurity Exception domain kunci kamusCara menangani SSL di iOS9 , Salah satu solusinya adalah melakukan seperti:
Seperti yang dikatakan Apple :
iOS 9 dan OSX 10.11 memerlukan TLSv1.2 SSL untuk semua host yang Anda rencanakan untuk meminta data dari kecuali Anda menentukan domain pengecualian di file Info.plist aplikasi Anda.
Sintaks untuk konfigurasi Info.plist terlihat seperti ini:
Jika aplikasi Anda (browser web pihak ketiga, misalnya) perlu terhubung ke host sewenang-wenang, Anda dapat mengonfigurasinya seperti ini:
Jika Anda harus melakukan ini, mungkin yang terbaik adalah memperbarui server Anda untuk menggunakan TLSv1.2 dan SSL, jika mereka belum melakukannya. Ini harus dianggap sebagai solusi sementara.
Sampai hari ini, dokumentasi pra-rilis tidak menyebutkan opsi konfigurasi ini dengan cara tertentu. Setelah itu, saya akan memperbarui jawaban untuk menautkan ke dokumentasi yang relevan.
Untuk info lebih lanjut, pergi ke iOS9AdaptationTips
sumber
Technote Apple di Keamanan Transportasi Aplikasi sangat berguna ; itu membantu kami menemukan solusi yang lebih aman untuk masalah kami.
Semoga ini bisa membantu orang lain. Kami mengalami masalah saat menyambung ke URL Amazon S3 yang tampaknya benar-benar valid, URL TLTv12 HTTPS. Ternyata kami harus menonaktifkan
NSExceptionRequiresForwardSecrecy
untuk mengaktifkan beberapa cipher yang digunakan S3.Di kami
Info.plist
:sumber
Jika Anda mengalami masalah dengan Amazon S3 ini seperti saya, coba tempel ini di info Anda. Daftar sebagai anak langsung dari tag tingkat atas Anda
Anda dapat menemukan info lebih lanjut di:
http://docs.aws.amazon.com/mobile/sdkforios/developerguide/ats.html#resolving-the-issue
sumber
Saya menemukan solusi dari sini. Dan ini bekerja untuk saya.
Lihat ini, mungkin membantu Anda.
sumber
Cukup tambahkan bidang berikut dalam file .plist Anda
Sintaksnya terlihat seperti ini:
sumber
Memperbarui:
Pada Xcode 7.1, Anda tidak perlu memasukkan
NSAppTransportSecurity
Kamus secara manual diinfo.plist
.Sekarang akan melengkapi secara otomatis untuk Anda, menyadari bahwa ini adalah kamus, dan kemudian melengkapi secara otomatis
Allows Arbitrary
Loads juga. tangkapan layar info.plistsumber
Memecahkan NSURLConnection Http bug yang gagal Hanya Tambahkan Dict berikut di info.plist:
sumber
Saya telah menyelesaikannya dengan menambahkan beberapa kunci di info.plist. Langkah-langkah yang saya ikuti adalah:
Saya Membuka file info.plist proyek saya
Menambahkan Kunci yang disebut NSAppTransportSecurity sebagai Kamus.
Menambahkan Subkey yang disebut NSAllowsArbitraryLoads sebagai Boolean dan mengatur nilainya menjadi YA seperti gambar berikut. masukkan deskripsi gambar di sini
Bersihkan Proyek dan Sekarang Semuanya Berjalan Baik seperti sebelumnya.
Tautan Ref: https://stackoverflow.com/a/32609970
sumber
Inilah yang bekerja untuk saya ketika saya memiliki kesalahan ini:
sumber
Anda dapat mencoba menambahkan fungsi ini dalam file RCTHTTPRequestHandler.m
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]); }
sumber
Selain jawaban yang disebutkan di atas, periksa kembali url Anda
sumber
Anda harus menambahkan
App Transport Security Settings
untukinfo.plist
dan menambahkanAllow Arbitrary Loads
keApp Transport Security Settings
sumber