首先,ATS的技术行为不会有任何变化(除了新增两个字段NSAllowsArbitraryLoadsInWebContent和NSRequiresCertificateTransparency,也就是更细分权限)。从技术角度来看,ATS在iOS10中和iOS9中的表现完全一致。
那么到底是什么变化了呢?我们会收紧审核政策,即对于开发者添加的ATS例外(即HTTP接口),要求提供一个“合理的解释”。之所以要增加这么一个“麻烦”,是为了避免开发者们都无脑地全局关闭ATS,使得ATS偏离其初衷,形同虚设。开发者将无法再无脑地全局关闭ATS,并且添加例外时需要提供合理的解释。
如此看来,苹果是想以这样的形式教育和促进HTTPS的普及,但也没有激进到一刀切的地步。一句话总结:你仍然可以在2017年之后使用HTTP​接口,但需要在ATS中添加例外,同时审核时多少说两句理由。更重要的是,你要知道这个政策会越来越紧。
躲得过初一,躲不过十五。早点开始考虑向HTTPS迁移吧!

针对 Info.plist

iOS 10 在之前版本中,app都在 Info.plist 中添加 NSAppTransportSecurity
字典并且将 NSAllowsArbitraryLoads
设置为YES来禁用 ATS。iOS 10中又添加了 NSAllowsArbitraryLoadsInWebContent 字典,这会对迁移方案产生什么影响呢?根据苹果要求,app 已经不能再使用之前的方式来禁用 ATS,也就意味着 NSAllowsArbitraryLoads 只能设置为 NO,否则就需要在审核时说明 app 不支持ATS的原因。
业内大神王巍已经总结了一幅非常直观的ATS对HTTP影响图表,如下:
1、NSAllowsArbitraryLoads 设置为 YES 似乎可以解决问题,但这不符合苹果ATS要求。

Paste_Image.png

2、NSAllowsArbitraryLoads 设置为 NO,NSAllowsArbitraryLoadsInWebContent 设置为 YES,HTTP只有在iOS 10下的 WKWebview可用。

E1AA34EA-640E-4F79-8BEF-7990BA8777C0.png

3、NSAllowsArbitraryLoads ,NSAllowsArbitraryLoadsInWebContent 都设置为 NO,HTTP全部不可用。

8C850327-049F-4004-BF9A-4CC9529AA242.png

4、NSAllowsArbitraryLoads 设置为 YES,NSAllowsArbitraryLoadsInWebContent 设置为 NO,HTTP只支持iOS 9但不符合ATS要求,而且iOS 10下的 WKWebview也不可用。

1FDB664B-FC60-47C1-888C-92F9E6D21700.png

5、NSAllowsArbitraryLoads ,NSAllowsArbitraryLoadsInWebContent 都设置为 YES,HTTP只有 WKWebView 支持。

9DBACE6B-7E3B-467F-B09B-E62E1785A0A3.png

综合苹果要求,与实际产品业务需求,选择使用 NSAllowsArbitraryLoads 设置为 NO (避免审核风险),NSAllowsArbitraryLoadsInWebContent 设置为 YES(允许链接HTTP),设置HTTP域名访问白名单,使用WKWebView作为Web容器的技术方案。

针对NSURLSession API

只需将网络库更新至最新版的AFNetworking,即可完美支持HTTP、HTTPS的API请求。

41EB44A0-4BB0-4614-B56C-D5C5453D9304.png

针对Web容器

使用 WKWebView 替换 UIWebView,业务对接采用Web与Native交互协议来解决兼容问题。iOS 10 中 WKWebView 完美支持HTTP、HTTPS的链接浏览(包括在线视频播放)。

887917D7-858D-4004-B495-6E7FDE2873B1.png

针对网络图片下载库SDWebImage

测试环境下将会使用自签名的SLL证书,需要修改一些代码才能支持,生产环境下使用商业签名证书无需做修改。

9DF0B1D0-4C03-4BC5-B6BB-61456DDC58D4.png

针对第三方HTTP链接

可以设置 NSExceptionDomains 属性来将需要排除强制验证的域名写进来。 也就是说我如果我们的 app 只访问我们自己的服务器, 我们可以将我们服务器的域名添加进来,依然可以继续使用 HTTP。但我们不能像之前那样简单粗暴的直接把所有的请求都通过。NSExceptionDomains 的设置方法如下, 比如我们要将 campus.chinahr.com 这个域名排除在 ATS 验证之外,就可以这样:

WechatIMG36.jpeg

不过苹果建议如果要提供浏览器类的服务,请使用SFSafariViewController(UI不可定制),优于WKWebView,后者更适用于对用户访问web内容更有把控的情况。

正确适配苹果ATS审核要求的姿势的更多相关文章

  1. 针对苹果最新审核要求为应用兼容IPv6

    在WWDC2015上苹果宣布iOS9将支持纯IPv6的网络服务.2016年初开始所有提交到App Store的应用必须支持IPv6.为确保现有的应用是兼容的,我们需要注意下面几点. 不建议使用底层的网 ...

  2. 为苹果ATS和微信小程序搭建 Nginx + HTTPS 服务

    昨天测试开发微信小程序,才发现微信也要求用HTTPS加密数据,想来是由于之前苹果的ATS审核政策的缘故吧,微信想在苹果上开放小程序必然也只能要求开发者必须使用HTTPS了,于是在服务器上测试安装Ngi ...

  3. 服务器配置ssl证书支持苹果ATS方法

    服务器配置ssl证书支持苹果ATS方法 发布日期:2016-12-14 苹果安全工程&架构部门主管Ivan Kristic表示ATS将在今年底成为App Sotre app的必要条件,这将大幅 ...

  4. 苹果ATS Win2008 R2 IIS7.5 HTTPS 证书的那些可能遇到的坑

    前言:工作这么多年,每一次要弄https 都和苹果有关,上一次是苹果app的企业安装形式,ios7后 .plist 文件必须在一个https路径. 这一次则是苹果的ATS计划,无疑这是在推动网络安全上 ...

  5. https与http的访问,应对苹果ATS验证问题

    为应对2017年1月1日苹果ATS的问题,微信.微博等等APP要求挂载的网页必须https访问,需要添加ssl认证. 一.SSL认证 选取了阿里云提供的免费SSL,使用期限为一年.电话咨询阿里客服,免 ...

  6. Apache和Nginx配置支持苹果ATS方法

    什么是ATS功能? ATS是iOS9和OS X El Capitan的一个新特性.开启该功能后,ATS对使用NSURLConnection, CFURL或NSURLSession 等APIs 进行的网 ...

  7. 苹果ATS 豁免摆乌龙?

    现象 我们的App已经完成了NA部分的ATS适配.网页端由于有使用到第三方的页面,所以开启了网页的豁免权限.关于如何开启豁免及方法,可以参考喵神的Blog最终,我们的适配参数为: NSAllowsAr ...

  8. 针对苹果最新审核要求:应用兼容IPv6

    在WWDC2015上苹果宣布iOS9将支持纯IPv6的网络服务.2016年初开始所有提交到App Store的应用必须支持IPv6.为确保现有的应用是兼容的,我们需要注意下面几点. 不建议使用底层的网 ...

  9. 针对苹果最新审核要求 为应用兼容IPv6

    本文授权转载,作者:我不是段誉(简书) 在WWDC2 015上苹果宣布iOS 9将支持纯IPv6的网络服务.2016年初开始所有提交到App Store的应用必须支持IPv6.而今年5月初,苹果宣布6 ...

随机推荐

  1. spring-eureka 源码解读----作为集群的eureka怎么样实现不做二次传播

    在平时工作中,eureka作为一个集群时候,我们会配置多个peer ,假设当前有服务器eureka-A,eureka-B,eureka-C. 如果Eureka A的peer指向了B, B的peer指向 ...

  2. 洛谷P4770 [NOI2018]你的名字(后缀自动机+线段树)

    传送门 我有种自己根本没学过SAM的感觉……最后还是抄了老半天的题解…… 首先,对$S$和每一次的$T$都建一个SAM 先考虑一下$l=1,r=\left| S \right|$的情况 设$lim_i ...

  3. Sublime Text 3 最新注册码激活码 和 Sublime Text 2 注册码

    Sublime是一款很好用的很轻巧的编辑器,堪称一代神级编辑器.此篇文章用于简单学习记录下神器的激活码,不作其他用途.如有侵权,请联系删除,谢谢~~   1.官方下载地址: http://www.su ...

  4. Vue实现选项卡效果

    <!DOCTYPE html> <html lang="en"> <head>    <meta charset="UTF-8& ...

  5. GYM 101933E(记忆化搜索)

    用每个人的血量作为状态去搜索T飞,考虑题解中更好的搜索方式:每种血量有多少个人作为状态.这样会减去很多重复的状态,因为只要乘一下就得到了所有相同情况的和. 虽然我不会算,但是直观感受起来复杂度比较优秀 ...

  6. guacamole的复制粘贴

    一.发送中文或文本(针对开发环境,生产环境不需变动) 官方下载的完整版js缺失了一部分关于粘贴板的代码,调用setclipboard方法,将外部内容复制到粘贴板的时候,提示方法不存在.需要补齐这部分源 ...

  7. windows/Linux下设置ASP.Net Core开发环境并部署应用

    10分钟学会在windows/Linux下设置ASP.Net Core开发环境并部署应用 创建和开发ASP.NET Core应用可以有二种方式:最简单的方式是通过Visual Studio 2017 ...

  8. 爬虫(Xpath)——爬tieba.baidu.com

    工具:python3 核心知识点: 1)lxml包不能用pip下载,因为里面有其他语言编写的文件 2)urlopen返回的请求是html文件,要使用 content = etree.HTML(html ...

  9. 网页抓取解析,使用JQuery选择器进行网页解析

    最近开发一个小功能,数据库中一个基础表的数据从另一个网站采集. 因为网站的数据不定时更新,需要更新后自动采集最新的内容. 怎么判断更新数据没有? 好在网站有一个更新日志提示的地方,只需要对比本地保留的 ...

  10. docker mysql安装

    Docker MySQL-Server 安装1.搜索docker search mysql# 一般会选择mysql-server 版本 2.拉取 docker pull mysql-server 3. ...