最近在处理德国用户必须关闭蜂窝移动数据才可以连接我们公司的自带WiFi功能的设备,这个问题让人头疼的地方在于只有德国才有这个问题,在国内无论如何都无法复现,而公司又无法安排我们去德国出差解决;所以我只能用各种想到的方式进行设置,然后让德国客户进行测试;
iOS9让所有的HTTP默认使用了HTTPS,原来的HTTP协议传输都改成TLS1.2协议进行传输。直接造成的情况就是App发请求的时候弹出网络无法连接。解决办法就是在项目的info.plist 文件里加上如下节点:
NSAppTransportSecurity - NSAllowsArbitraryLoads
这个子节点的意思是:是否允许任性的加载?! 设为YES的话就将禁用了AppTransportSecurity转而使用用户自定义的设置,这个问题就解决了。
在尝试NSAllowsArbitraryLoads设置为NO后,在一个新的没有卡的手机上进行测试;然而却无论如何都无法正常建立socket;通过查看打印发现,在socket的回调中,一直在打印错误信息“Disonnect FAIL reason:No route to host”;
当时有点怀疑为何会这样;IP和端口都对的话,按理说应该是能正常建立socket连接的才对;最后,我突然想起了之前适配iOS 10 时遇到的一个问题,在国行的iPhone手机上第一次安装某个APP并打开时,如果该手机联网的话,默认会弹出一个是否允许app使用数据?的弹出框;在点击允许前是无法建立任何网络请求的;
在点击允许前,在设置页面,对应APP的信息中只包含当前允许的权限,如地理位置;在允许后,此处也会显示网络数据的权限设置;
你还可以从「设置 - 蜂窝移动网络 - 使用无线局域网与蜂窝移动的应用」中,对所有你允许过联网的 App 进行统一管理。在该设置列表内,你不仅可以分别查看每个 App 消耗了多少流量,还能对 App 的联网权限进行三种选项管理:关闭联网、仅无线局域网、无线局域网与蜂窝移动数据。
所以瞬间我就明白原因了,当前手机没有手机卡,而且连接的WiFi是无法联网的,所以该手机是完全没有网络的,因此在打开该应用后,并没有弹出是否允许app使用数据?的弹出框;在给手机插上卡后,再次打开时,就有了提示,点击允许后,终于可以正常使用;
本文作为个人总结记录,如有问题欢迎指正;
参考文章:
iOS 10 的坑:新机首次安装 app,请求网络权限“是否允许使用数据
”http://www.jianshu.com/p/6cbde1b8b922
http://www.jianshu.com/p/a2af8e3dcaa3
iOS 10 在进行 Socket 通讯产生的坑...http://www.jianshu.com/p/576a3f89320c
具透 | 你可能不知道,iOS 10 有一个中国「特供」的联网权限功能https://sspai.com/post/35720