HybridApp iOS ATS解决方案
苹果在最近的一次WWDC上提出将在2017年1月1日起强制我们用HTTPS,否则提交App可能会被拒绝。很多ios应用的已经放出支持HTTPS的SDK了。本文主要针对混合式IOS应用提供相关的解决方案,欢迎探讨。

info.plist中NSAppTransportSecurity字典结构
NSAppTransportSecurity : Dictionary {
NSAllowsArbitraryLoads : Boolean // 默认开启ATS,设置为NO关闭ATS,需审核时说明
NSAllowsArbitraryLoadsForMedia : Boolean //iOS10新特性,设置为YES使用AVFoundation播放在线,视频不受ATS限制,需审核时说明原因
NSAllowsArbitraryLoadsInWebContent : Boolean // iOS10新特性,设置为YES使用UIWebView或,WKWebView不受ATS限制,需审核时说明原因
NSAllowsLocalNetworking : Boolean // iOS10新特性,设置为YES本地网络请求不受ATS限制
NSExceptionDomains : Dictionary { // 配置特定域名的ATS访问属性
<domain-name-string> : Dictionary { // 特定域名,注意不支持IP地址
NSIncludesSubdomains : Boolean // 设置为YES该域名的ATS配置适用于子域名
NSExceptionAllowsInsecureHTTPLoads : Boolean // 设置为YES该域名可通过HTTP访问,需审核时说明原因
NSExceptionMinimumTLSVersion : String // 该域名支持的TLS最低版本,需审核时说明原因
NSExceptionRequiresForwardSecrecy : Boolean // 默认值为YES,置为NO访问该域名时可以不支持perfect forward secrecy (PFS)
NSRequiresCertificateTransparency : Boolean // 设置为YES该域名服务器需要有效的
SCT(signed Certificate timestamps)
}
}
}
注:关于NSAppTransportSecurity的配置,可通过/usr/bin/nscurl(OS X v10.11及以上系统支持)工具模拟进行ATS网络连接状况诊断,命令如下:
/usr/bin/nscurl --ats-diagnostics --verbose URL
命令会模拟ATS属性不同配置场景的连接状况,可根据输出内容参考配置。
关于HTTPS,大概分两种类型的证书,一类是CA机构认证的,另一类是自签名的,比较典型的就是12306网站了
1 采用CA机构认证的SSL证书:
Info.plist —— 无需改动
代码 —— js通过https进行请求数据,无需改动代码。
2 采用自签名SSL证书:
Info.plist —— 修改如下:
<key>NSExceptionDomains</key>
<dict>
<key>域名</key>
<dict>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
由于cordova项目的网络请求基本都通过UiWebView的ajax去访问,而UiWebView的ajax请求不支持客户端证书验证,如若需引入证书与服务端校验需要自定义cordova原生插件支持,故这里提供两种方式去实现。
1 基于UiWebView的ajax请求(该方式客户端并不校验服务端证书内容):
(a)AppDelegate.m新增:

(b)在js中直接通过ajax请求https即可
2 基于原生NSUrlSession的网络请求(需导入证书,网络请求时会验证服务端证书是否可信):
(a)导入NativeHttps cordova插件

在Config.xml中引用该插件内容:

导入证书,修改NativeHttps.m中的pluginInitialize方法,将证书添加到trustedCerArr数组中

(b)在调用ajax的公共js中新增插件方法调用原生get/post请求:

(c)在对应页面调用原生方法(get/post一致):

参考文章:
https://onevcat.com/2016/06/ios-10-ats/ (关于 iOS 10 中 ATS 的问题)
https://github.com/ChenYilong/iOS9AdaptationTips
HybridApp iOS ATS解决方案的更多相关文章
- Safari 前端开发调试 iOS 完美解决方案
转http://www.2cto.com/kf/201403/283404.html afari 前端开发调试 iOS 完美解决方案 2014-03-05 0个评论 来源:Safari ...
- 苹果iOS APP配置HTTPS,iOS ATS配置SSL,苹果ATS标准解决方案
参考沃通:
- UNITY3D与iOS交互解决方案
原地址:http://bbs.18183.com/thread-456979-1-1.html 本帖最后由 啊,将进酒 于 2014-2-27 11:17 编辑 “授人以鱼,不如授人以渔”,以UNIT ...
- iOS ATS问题(补充中)
首先,针对2017年一月后,需要提交到apple store的程序,如果使用App Transport Security Settings对程序 ATS情况进行特殊配置,需要对苹果进行说明,指出使用的 ...
- App与Js交互(三)Android、iOS通用解决方案推荐
https://www.jianshu.com/p/6224f429ce87 window.navigator.userAgent用来区分设备和浏览器 https://blog.csdn.net/li ...
- iOS定位问题解决方案
在需要用到定位服务时,需在info文件中加入: 1.NSLocationWhenInUseUsageDescription(类型为:string,值为:”我们需要通过您的地理位置信息获取您周边的相关数 ...
- iOS问题#解决方案#之关于“application/x-www-form-urlencoded;charset=utf-8” not supported
http://www.cnblogs.com/ChenYilong http://www.cnblogs.com/ChenYilong 如果你用的是AFN/ASI,那得修改源代码了,因为AFN ...
- Apache和Nginx配置支持苹果ATS方法
什么是ATS功能? ATS是iOS9和OS X El Capitan的一个新特性.开启该功能后,ATS对使用NSURLConnection, CFURL或NSURLSession 等APIs 进行的网 ...
- IOS网络请求之AFNetWorking 3.x 使用
前言: 计划把公司的网络请求与业务解耦,所以想着学习一下网络请求,最近学习了NSURLSession,今天来学习一下基于NSURLSession封装的优秀开源框架AFNetWorking 3.x,之前 ...
随机推荐
- [IOS Delegate和协议]
转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/25655443 作者:小马 代理和协议的语法这里不赘述,自己查资料. 这个demo的 ...
- Laravel 5 中的配置
介绍 Laravel 的所有的配置文件都放在了 config 这个目录的下面.每个选项都有介绍. config├── app.php├── auth.php├── cache.php├── compi ...
- C# ServiceStack.Redis 操作对象List
class Car { public Int32 Id { get; set; } public String Name { get; set; } static void Main(string[] ...
- C++中debug和release的区别 . 转载
vc中debug和release的不同 收藏 在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现:release与debug运行结果不一致,甚至出错,而release又不方便调试,真的是当 ...
- WPF 复制和粘贴
/// <summary> /// 复制或剪切文件到剪切板 /// </summary> /// <param name="files">文件路 ...
- Socket 学习入门
http://www.codeproject.com/Articles/13071/Programming-Windows-TCP-Sockets-in-C-for-the-Begin
- ICMP Internet控制报文协议
ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网 ...
- dns (域名系统)
dns (域名系统) DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP ...
- linux下可以禁用的一些服务
linux下多软件/多脚本之间的配合: 包括做好 “实体”和“配置”两个方面的事情 “实体”是指实实在在的脚本文件,服务脚本: “配置”是指其他与之交互的.协同工作的软件.脚本,要进行适当的配置,告知 ...
- Bootstrap幻灯轮播如何支持触屏左右滑动手势?
最近ytkah在学习用bootstrap搭建网站,Bootstrap能自适应pc端和手机端,并且移动设备优先,适合现如今移动营销.bootstrap是封装好的框架,需要某些功能只需调用相应的组件就可以 ...