Unity 编译IOS报错:NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask(Code=1022)

一、问题

某项目需要打包IOS,在打包过程中遇到了很多问题,以下是网络请求数据时报错

Task .<1180> finished with error [-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.” UserInfo={NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection., NSErrorFailingURLStringKey=XXXXX,_NSURLErrorRelatedURLSessionTaskErrorKey=( “LocalDataTask .<1180>” ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask .<1180>, NSUnderlyingError=0x28107b660 {Error Domain=kCFErrorDomainCFNetwork Code=-1022 “(null)”}}

二、原因

开发同学使用了http而不是https,出现问题的原因,是iOS9引入了新特性App Transport Security (ATS)。详情:App Transport Security (ATS)
新特性要求App内访问的网络必须使用HTTPS协议。但是我们的项目使用的是HTTP协议,使用私有加密方式保证数据安全

知识点

HTTP 与 HTTPS 区别

  • HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
    使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
  • HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
    http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
  • HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。

三、解决方案

  1. 如果要是方便的话,最好还是使用https
  2. 不愿意修改代码的情况下。可以在Xcode的工程目下的Info.plist添加以下修改在这里插入图片描述
    注意:请先XCode->Product->Clean Build Folder清除缓存,重新编译

猜你喜欢

转载自blog.csdn.net/weixin_42186644/article/details/126044307