DCloud_App_Array
DCloud_App_Array
  • 发布:2016-12-28 22:08
  • 更新:2020-05-11 12:22
  • 阅读:32636

提交苹果App store审核强制要求ATS,及访问非HTTPS服务器地址导致文件下载、上传、ajax无法正常工作 的问题

分类:HTML5+

云打包已默认关闭ATS,无需在进行关闭配置, 如果应用完全支持https可以使用文章中的方法确保应用通讯的数据安全

iOS从9.0版本开始添加了对应用数据传输的安全性要求(ATS),为了保证向下兼容HBuilder云端打包做了统一配置应用关闭ATS限制开关。目前从公开的消息是从2017年开始App store审核将加强关闭ATS应用的审核(具体情况暂时还不明确,预计可能会导致应用无法通过审核)。
实际上苹果对应用的ATS是分等级控制,可以全局关闭ATS限制,也可对Webview访问资源关闭ATS限制,也可对特定的域名进行ATS策略控制(指定特定域名不受ATS限制),详情可参考网上资料(http://www.jianshu.com/p/36ddc5b009a7)。
为了避免关闭ATS限制导致应用无法通过审核的问题,HBuilder云端打包将调整默认策略为开启ATS限制(Alpha打包机从2016-12-29日开始,正式打包机计划从2017-1-1日开始),并添加以下配置策略:

  1. 关闭通过webview 发出的网络请求的ATS限制(Webview对象可以访问http资源);
  2. 关闭载入任意本地资源ATS限制(第三方SDK访问本地资源)。

如果开启ATS后,iOS9以下需要做兼容处理.,可通过判断系统版本请求不同的地址(plus.os.version)

调整默认配置后对普通5+应用运行不会有影响,在Webview中仍然可以访问http资源,但是以下5+ API请求的服务器地址必需符合ATS规范(使用https),影响的模块如下:

  1. Downloader(文件下载),影响API范围:plus.downloader.*;
  2. Uploader(文件上传),影响API范围:plus.uploader.*;
  3. XMLHtttpRequest(跨域网络连接),影响API:plus.new.XMLHttpRequest。
    如果应用中使用了以上5+ API访问非https服务器地址,将会导致无法正常工作,推荐将服务器地址修改为https来解决,也可以使用下面的指定特定域名关闭ATS限制方法来配置允许http访问特定域名。

如果应用需要自定义ATS策略,可通过以下方法修改:

设置全局关闭ATS限制

在manifest.json的“plus->distribute->apple”节点下添加plistcmds数据如下:

"plistcmds":["Add :NSAppTransportSecurity:NSAllowsArbitraryLoads bool true"]

如果应用完全支持https(请使用ATS检测工具测试地址是否满足 ATS 特性),可使用以下方法设置Webview开启ATS限制及载入本地资源ATS限制

对于服务器已经完全支持https的应用,推荐配置这种策略,可确保应用通讯的数据安全。
在manifest.json的“plus->distribute->apple”节点下添加plistcmds数据如下:

"plistcmds":["Set :NSAppTransportSecurity:NSAllowsArbitraryLoadsInWebContent NO",  
    "Set :NSAppTransportSecurity:NSAllowsLocalNetworking NO"  
]

指定特定域名关闭ATS限制

特定域名关闭ATS限制后可以通过http访问服务器,可能需要开发者提交App store审查时说明原因。
在manifest.json的“plus->distribute->apple”节点下添加plistcmds数据如下:

"plistcmds":["Add :NSAppTransportSecurity:NSExceptionDomains dict ",  
    "Add :NSAppTransportSecurity:NSExceptionDomains:qq.com dict ",                      // 指定允许不使用ATS访问qq.com域名  
    "Add :NSAppTransportSecurity:NSExceptionDomains:qq.com:NSIncludesSubdomains bool true",  
    "Add :NSAppTransportSecurity:NSExceptionDomains:qq.com:NSExceptionAllowsInsecureHTTPLoads bool true",  
    "Add :NSAppTransportSecurity:NSExceptionDomains:dcloud.net.cn dict ",            // 指定允许不使用ATS访问dcloud.net.cn域名  
    "Add :NSAppTransportSecurity:NSExceptionDomains:dcloud.net.cn:NSIncludesSubdomains bool true",  
    "Add :NSAppTransportSecurity:NSExceptionDomains:dcloud.net.cn:NSExceptionAllowsInsecureHTTPLoads bool true"  
]

云打包后生效

真机调试基座默认关闭ATS,但HBuilder (7.6.5)是开启的,需要使用此基座替换使用https://pan.baidu.com/s/1qXZD9SS其他低版本不受影响

目前还不能确定从2017年开始App store审核对于ATS要求的准确细则,有碰到相关问题导致审核失败的开发者可以反馈问题,我们将尽快跟进处理

11 关注 分享
猫猫猫猫 追逐者 QTFYING Maxil lhyh 1***@163.com Trust vine 7***@qq.com g***@togeek.cn shimeifang

要回复文章请先登录注册

chaosbead

chaosbead

回复 洛洛尔 :
好的谢谢,我试试
2017-01-16 14:42
洛洛尔

洛洛尔

回复 chaosbead :
我是这样做的。其实我觉得Hbuilder只要不是最新版应该就行
2017-01-16 14:39
chaosbead

chaosbead

回复 洛洛尔 :
版本号7.6.2.201611251335 ,用这个版本打包,然后设置全局就可以了吗
2017-01-16 14:25
chaosbead

chaosbead

回复 wenju :
我的也是这种情况,你解决了吗
2017-01-16 14:03
洛洛尔

洛洛尔

回复 wenju :
http://www.dcloud.io/
点下载之后会出现一个弹出框,弹出框的右下角有一个历史版本,上那里下去就可以了,点完历史版本的地址好像是这个http://pan.baidu.com/s/1dDvoaHj
2017-01-16 11:36
wenju

wenju

回复 洛洛尔 :
亲 你这个版本从哪里下的 为啥我看这里 木有找到? http://pan.baidu.com/s/1dDvoaHj#list/path=%2F%E5%8E%86%E5%8F%B2%E7%89%88%E6%9C%AC&parentPath=%2F
2017-01-15 22:25
wenju

wenju

回复 骁骑 :
都暂停审核了 云打包为什么不换回以前的 取消ATS限制呀
2017-01-15 22:20
wenju

wenju

请问最快的解决办法是什么 服务器现在搞不了Https ; 我是不是在manifest.json的“plus->distribute->apple”节点下添加plistcmds数据如下:

"plistcmds":["Add :NSAppTransportSecurity:NSAllowsArbitraryLoads bool true"]

然后重新打包发一个版本 叫用户重新安装对吗??
2017-01-15 20:31
wenju

wenju

好烦呀 前天苹果刚审核通过 今天一大波用户说APP连接不了网 我现在才看到这个帖子 坑爹啊!!!
2017-01-15 20:29
洛洛尔

洛洛尔

回复 4***@qq.com :
版本号7.6.2.201611251335 ,关闭全局就是这句话,我打包好使啊
2017-01-14 10:30