苹果在最近的一次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解决方案的更多相关文章

  1. Safari 前端开发调试 iOS 完美解决方案

    转http://www.2cto.com/kf/201403/283404.html afari 前端开发调试 iOS 完美解决方案 2014-03-05      0个评论    来源:Safari ...

  2. 苹果iOS APP配置HTTPS,iOS ATS配置SSL,苹果ATS标准解决方案

    参考沃通:

  3. UNITY3D与iOS交互解决方案

    原地址:http://bbs.18183.com/thread-456979-1-1.html 本帖最后由 啊,将进酒 于 2014-2-27 11:17 编辑 “授人以鱼,不如授人以渔”,以UNIT ...

  4. iOS ATS问题(补充中)

    首先,针对2017年一月后,需要提交到apple store的程序,如果使用App Transport Security Settings对程序 ATS情况进行特殊配置,需要对苹果进行说明,指出使用的 ...

  5. App与Js交互(三)Android、iOS通用解决方案推荐

    https://www.jianshu.com/p/6224f429ce87 window.navigator.userAgent用来区分设备和浏览器 https://blog.csdn.net/li ...

  6. iOS定位问题解决方案

    在需要用到定位服务时,需在info文件中加入: 1.NSLocationWhenInUseUsageDescription(类型为:string,值为:”我们需要通过您的地理位置信息获取您周边的相关数 ...

  7. iOS问题#解决方案#之关于“application/x-www-form-urlencoded;charset=utf-8” not supported

    http://www.cnblogs.com/ChenYilong   http://www.cnblogs.com/ChenYilong   如果你用的是AFN/ASI,那得修改源代码了,因为AFN ...

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

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

  9. IOS网络请求之AFNetWorking 3.x 使用

    前言: 计划把公司的网络请求与业务解耦,所以想着学习一下网络请求,最近学习了NSURLSession,今天来学习一下基于NSURLSession封装的优秀开源框架AFNetWorking 3.x,之前 ...

随机推荐

  1. Linux X Window System运行原理和启动过程

    本文主要说明X Window System的基本运行原理,其启动过程,及常见的跨网络运行X Window System. 一) 基本运行原理 X Window System采用C/S结构,但和我们常见 ...

  2. IOS基础之 (八) Foundation框架

    一 常用类 NSRange 范围,NSPoint  点,NSSize /CSSize 大小,CGRect 1 NSRange 1)NSRange是一种C语言结构用来帮助描述一系列的条款,包括一个起点位 ...

  3. Handler.dispatchMessage handleMessage

    "main@3972" prio=5 runnable java.lang.Thread.State: RUNNABLE at com.ease.financialoa.modul ...

  4. AngularJS 的数据绑定

    单向绑定(ng-bind) 和 双向绑定(ng-model) 的区别 ng-bind 单向数据绑定($scope -> view),用于数据显示,简写形式是 {{}}. 1 <span n ...

  5. JavaScript模块化学习基础

    http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 一.原始写法 模块就是实现特定功能的一组方法. 不同函数简单放在一起就算一个 ...

  6. pyenv 以及 virtualenv

    244 pyenv global 3.5.1 245 which python 246 python 247 pip install virtualenv 248 ls 249 pwd 250 ls ...

  7. DEDECMS 5.7之前版本远程SQL注入漏洞

    2012/4/29 凌晨 知道创宇安全研究团队截获到最新DEDECMS SQL注入 0day,官网目前提供下载的最新版5.7也受影响,截止本告警发出时官方尚未给出补丁或解决方案,此漏洞利用简单且ded ...

  8. centos命令

     alt + z 打开终端(自定义命令)  su 切换到root

  9. Java操作Excel(读、写、搜索关键字、插入图片)

    import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet; import jxl.Workb ...

  10. MYSQL远程登录权限设置(转)

    Mysql默认关闭远程登录权限,如下操作允许用户在任意地点登录: 1. 进入mysql,GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ...