Tôi hiện đang làm việc trên Xcode 7 beta 6. Tôi đang cố gắng để gửi một yêu cầu "DELETE" để http://mySubdomain.herokuapp.comBảo mật Giao thông vận tải ứng dụng Xcode 7 beta 6
Các lỗi tôi nhận được là:
App Giao thông vận tải An ninh đã chặn một HTTP cleartext (http: //) tải tài nguyên vì nó là không an toàn. Các ngoại lệ tạm thời có thể được định cấu hình thông qua tệp Info.plist của ứng dụng của bạn.
Lỗi khi thực hiện cuộc gọi API: Tên miền lỗi = NSURLErrorDomain Code = -1022 Không thể tải tài nguyên vì chính sách Bảo mật chuyển tải ứng dụng yêu cầu sử dụng kết nối an toàn.
NSLocalizedDescription = Tài nguyên không thể được nạp bởi vì chính sách App Giao thông vận tải An ninh đòi hỏi việc sử dụng một kết nối an toàn, NSUnderlyingError = 0x796f7ef0. {Lỗi miền = kCFErrorDomainCFNetwork Mã = -1022 "(null)"}}
Trong cuộc gọi API thực tế của tôi, tôi đặt "https" thay vì "http" và thực sự đã làm việc cho các yêu cầu POST của tôi. Nhưng yêu cầu DELETE ném lỗi trên.
Tôi đã xem các giải pháp ở đây liên quan đến tệp pList, nhưng không có giải pháp nào trong số họ đã làm việc cho tôi. Tôi đã liệt kê các nỗ lực của mình bên dưới.
nỗ lực đầu tiên:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Second try:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>herokuapp.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>
Và cuối cùng, tôi thậm chí đặt tất cả các phím này tạm thời trong như vậy:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>herokuapp.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSTemporaryThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSTemporaryThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
<key>NSTemporaryRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>
Tất cả không có may mắn! Tôi luôn gặp lỗi tương tự. Yêu cầu DELETE được định dạng đúng bởi vì khi tôi làm thủ công từ Postman, tôi nhận được kết quả mong muốn.
Đây là những gì phương pháp gọi API thực tế của tôi trông như thế nào, chỉ trong trường hợp có thể có một vấn đề ở đây:
class func makeDELETEALLRequest(completion: (error:Bool) -> Void) {
let session = NSURLSession.sharedSession()
let url = NSURL(string:"https://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean")
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "DELETE"
let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in
if (error != nil) {
print("Error making API call: \(error!)")
completion(error: true)
} else {
let HTTPResponse = response as! NSHTTPURLResponse
let statusCode = HTTPResponse.statusCode
if (statusCode == 200){
print("Successfully deleted!")
completion(error: false)
} else {
print("Different status code: \(statusCode)")
completion(error: true)
}
}
}
task.resume()
}
Một lần nữa, tôi đang sử dụng Xcode 7 beta 6.
VỀ CHỌN ĐÁP MY Câu trả lời tôi chọn là đúng là phù hợp với tôi vì tôi đã làm tất cả những thay đổi này vào file plist sai trong dự án của tôi và trả lời rằng là người duy nhất mà giải quyết khả năng. Các giải pháp được cung cấp bởi các câu trả lời khác không sai, vì vậy bất kỳ người nào khác gặp phải vấn đề này nên cho họ một thử, vì chúng là hợp lệ. Tôi hy vọng điều này sẽ giúp mọi người có vấn đề tương tự.
Hướng dẫn Để kiểm tra sự chấp nhận của URL Web có sẵn https://medium.com/@Mrugraj/app-transport-security-b7910c4fc70f. điều này có thể giúp hiểu cho tương lai – Mrug
Công việc cố gắng đầu tiên trong trường hợp của tôi theo bất kỳ cách nào tôi tìm thấy nó hữu ích vì vậy tôi có ngón tay cái lên cho u –