苹果在最近的一次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. Git删除文件操作

    使用Git删除文件需要使用Git rm命令来实现,最后git commit 需要注意的是直接rm命令删除后是不可以的,可以用git status 命令尝试一下,效果如图下(创建了test文件,演示了g ...

  2. Intent和Intent Filter Context

    http://www.android-doc.com/reference/android/content/Intent.html An intent is an abstract descriptio ...

  3. JAVA敏捷开发环境搭建

    前面介绍了创业型软件公司的工作模式,这里详细介绍下如何实施,第一步是先要搭建环境,有了环境才能开展工作. 整个软件项目分为四个环境 开发本地环境.开发环境.测试环境.IDC环境.和传统C++开发不一样 ...

  4. Spring学习8-Spring事务管理(AOP/声明式式事务管理)

    一.基础知识普及 声明式事务的事务属性: 一:传播行为 二:隔离级别 三:只读提示 四:事务超时间隔 五:异常:指定除去RuntimeException其他回滚异常.  传播行为: 所谓事务的传播行为 ...

  5. hdu 1049 Climbing Worm

    解题思路: 1. 两种情况,0x1:井深度小于一次跳的高度.0x2:井深度大于一次跳的高度 2.如果 属于 0x1 则一次跳出 3.否则 本次解题中直接枚举跳的次数 一直循环,直到 [每次跳的真实高度 ...

  6. VS2012变化的快捷键:

    VS2012变化的快捷键: 注释::VS2010是(Ctrl+E,C),VS2012是(Ctrl+K, Ctrl+C),实际操作,按住Ctrl键不放,先按K键,再按C键.相当于Ctrl+K加 Ctrl ...

  7. jar包与lib包的区别

    jar包是编译时使用,假如编译出错代码没问题一定是jar包的问题,lib是运行时使用,比如程序启动后出错了但是编译没有问题,就可能是lib出错了,不会是jar包的问题.

  8. iOS开发摇动手势实现详解

    1.当设备摇动时,系统会算出加速计的值,并告知是否发生了摇动手势.系统只会运动开始和结束时通知你,并不会在运动发生的整个过程中始终向你报告每一次运动.例如,你快速摇动设备三次,那只会收到一个摇动事件. ...

  9. socket基本

    fd_set用法: http://blog.sina.com.cn/s/blog_5c8d13830100erzs.htm socket连接: lpszHost="127.0.0.1&quo ...

  10. HDOJ 2389 Rain on your Parade

     HK.... Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K ...