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

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

\n

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)

\n

调整默认配置后对普通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限制

\n

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

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

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

\n

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

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

指定特定域名关闭ATS限制

\n

特定域名关闭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"
]
\n

云打包后生效

\n

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

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


9 分享
瞳player 追逐者 QTFYING Maxil lhyh 18798799912@163.com DCloud_客服_Trust vine 715515390@qq.com
715515390@qq.com

715515390@qq.com

赞一个
0 赞 2016-12-29 10:54
Element

Element

6666
0 赞 2016-12-29 15:31
临风

临风

刚用了 Alpha打包机 试过了 还是失败的
0 赞 2016-12-29 15:54
DCloud_App_Array

DCloud_App_Array 回复 临风

是打包失败还是审核失败,请提供更详细的信息
0 赞 2016-12-29 21:59
老火

老火

服务器已经全面支持ats了,还没上过新的版本,这几天上一个新版看看给有问题
0 赞 2016-12-30 12:25
临风

临风 回复 DCloud_App_Array

是审核失败,有3条,当时没截图
0 赞 2017-01-01 15:42
EmmenCao

EmmenCao

无效。
0 赞 2017-01-01 18:14
707975349@qq.com

707975349@qq.com

Hbuilder今天更新后,ios9.3,高德地图jsAPI 定位报ReferenceError: Can't find variable: AMap;旧版本正常
1 赞 2017-01-03 11:00
洛洛尔

洛洛尔

今天更新了之后$.ajax和mui.getJson都不行了,$.ajax的type为error,但是服务是启着的,不知道是不是和更新有关啊。我把全局关闭ATS那句话加上了也不行……
0 赞 2017-01-03 11:31
洛洛尔

洛洛尔 回复 洛洛尔

应该就是更新的问题吧,重装以前的版本就好了……_(:зゝ∠)_
0 赞 2017-01-03 12:21
临风

临风

在线打包成功,上传也可以 但是没审核通过,收到邮件
This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSContactsUsageDescription key with a string value explaining to the user how the app uses this data.

可是我没有在权限中添加通讯录啊?
0 赞 2017-01-04 11:53
瞳player

瞳player 回复 临风

应该是有SDK用到了
0 赞 2017-01-04 16:05
瞳player

瞳player

单独设置webview的ATS在iOS9是不支持的,这会导致那些没有给服务器配置https的家伙云打包以后在iOS9无法联网
0 赞 2017-01-04 16:07
121380608@qq.com

121380608@qq.com

为啥更新过后我以前写的视频不能播放了,视屏地址是http的
0 赞 2017-01-04 20:18
ilijiayin

ilijiayin

更新后视频不能播放,视频地址是http的
0 赞 2017-01-05 10:39
51MZT

51MZT

我元旦前的包正常,现在从打包挂。 ajax全部。。。
0 赞 2017-01-05 14:40
xjn8_2003@163.com

xjn8_2003@163.com

7.65的版本ios 9 真机调试时,ajax只能连接https的网站,一般的http网站都是abort。设置全局关闭或部分域名ATS限制也是不行。
0 赞 2017-01-06 08:39
xjn8_2003@163.com

xjn8_2003@163.com

http://www.cnblogs.com/dahe007/p/6212129.html
0 赞 2017-01-06 08:43
DCloud_SDK_骁骑

DCloud_SDK_骁骑

在使用中发现如下问题
在ios 10.2系统下发现打开全局ATS限制会导致在线视频无法播放,
在使用中可通过切换成WKWebview内核(manifest.json文件的plus节点下添加kernel:WKWebview)或者关闭当前当前应用的ATS限制(苹果已经推迟ats最后生效时间,具体时间未定)
1 赞 2017-01-07 11:48
洛洛尔

洛洛尔 回复 DCloud_SDK_骁骑

不提交应用商店的话是不是就不用审核ATS了?是不是就不用https了?
0 赞 2017-01-10 16:25
DCloud_SDK_骁骑

DCloud_SDK_骁骑 回复 洛洛尔

是的,苹果也暂停的ATS的审核
0 赞 2017-01-10 16:29
洛洛尔

洛洛尔 回复 DCloud_SDK_骁骑

哇,回复速度好快~谢谢~
0 赞 2017-01-10 16:37
237828248@qq.com

237828248@qq.com

你好,根据上面说的 修改了.json文件,替换了基座 ,还是无法通讯 是怎么回事儿
0 赞 2017-01-11 14:26
237828248@qq.com

237828248@qq.com 回复 洛洛尔

请问你的问题解决了吗
0 赞 2017-01-11 14:57
972399435@qq.com

972399435@qq.com

现在全局关闭ATS限制,mui.ajax还是包abort的问题
0 赞 2017-01-12 15:52
972399435@qq.com

972399435@qq.com

ios现在全局关闭ATS限制,mui.ajax还是包abort的问题
0 赞 2017-01-12 15:52
972399435@qq.com

972399435@qq.com

ios现在全局关闭ATS限制,生效时需要在线打包之后的才能生效吗?
0 赞 2017-01-12 16:10
洛洛尔

洛洛尔 回复 237828248@qq.com

我解决了。我把Hbuilder换回老版本了,然后把官方说的那句关闭全局ATS的话也加上了,这样在用Hbuilder连接和打包后测试都没问题了
0 赞 2017-01-12 16:36
497826788@qq.com

497826788@qq.com 回复 洛洛尔

请问你装回Hbuilder哪个旧版本,关闭全局是这句够了吗?("plistcmds":["Add :NSAppTransportSecurity:NSAllowsArbitraryLoads bool true"]),,,
我这边两天了,装回7.4打包还是测试报$.ajax的type为error。
看到请帮忙给出回复,谢谢
0 赞 2017-01-12 19:23
1465245492@qq.com

1465245492@qq.com

打包测试没问题,但是上架之后9不能联网啊,这要怎么办
0 赞 2017-01-13 09:57
洛洛尔

洛洛尔 回复 497826788@qq.com

版本号7.6.2.201611251335 ,关闭全局就是这句话,我打包好使啊
0 赞 2017-01-14 10:30
wenju

wenju

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

wenju

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

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

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

wenju 回复 DCloud_SDK_骁骑

都暂停审核了 云打包为什么不换回以前的 取消ATS限制呀
0 赞 2017-01-15 22:20
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
0 赞 2017-01-15 22:25
洛洛尔

洛洛尔 回复 wenju

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

chaosbead 回复 wenju

我的也是这种情况,你解决了吗
0 赞 2017-01-16 14:03
chaosbead

chaosbead 回复 洛洛尔

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

洛洛尔 回复 chaosbead

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

chaosbead 回复 洛洛尔

好的谢谢,我试试
0 赞 2017-01-16 14:42
wenju

wenju 回复 chaosbead

我就昨晚用最新的HBuilder 加了那句话 云打包 现在在审核中 还不知道行不行呢 悲伤; 官网应该是Https要自己配置才对嘛..... 现在改得Http要自己配置 ,大家哪里知道...出了问题才知道坑爹
0 赞 2017-01-16 16:27
58729131@qq.com

58729131@qq.com

加了设置全局关闭ATS限制 打包api安装后 还是无法访问网络 有官方人员说明一下吗
0 赞 2017-01-16 16:35
chaosbead

chaosbead 回复 wenju

我现在换了7.6.3在试
0 赞 2017-01-16 16:35
wenju

wenju

昨天早上申请加急 今天凌晨审核通过了 叫用户卸载重新安装可以正常运行了 胜利胜利...把我坑惨了..
0 赞 2017-01-17 10:13
cxian

cxian 回复 wenju

最新版本然后添加配置"plistcmds":["Add :NSAppTransportSecurity:NSAllowsArbitraryLoads bool true"] 就OK了吗? 求指点
0 赞 2017-01-17 11:01
wenju

wenju 回复 cxian

对的
0 赞 2017-01-17 12:02
wuzy@liangjiang.com

wuzy@liangjiang.com

plus.uploader.createUpload 使用https IOS打包可以上传成功,但android打包上传失败。android使用http可以上传成功。目前只在代码中使用判断安卓用http,ios用https。希望修复下这个问题,若是我用错了,请帮忙指正下。谢谢!
0 赞 2017-01-17 23:42
1241425486@qq.com

1241425486@qq.com

ios webview submit 提交不了表单(外部https)是因为这个原因吗
0 赞 2017-01-18 11:12
盗版

盗版 回复 cxian

试过了 还是不行
0 赞 2017-01-19 10:06
cxian

cxian 回复 盗版

这个方法是不行的,有使用文件上传和下载的绝对不行,申请了https证书解决,还是搞证书吧
0 赞 2017-01-19 11:38
wenju

wenju

坑爹呀 我发现downloader失效了 ajax正常 为什么downloader失效呀 差量更新和全量更新怎么搞呀
0 赞 2017-02-09 00:35

要回复文章请先登录注册