博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
API网关的iOS SDK已经支持 IPV6
阅读量:6494 次
发布时间:2019-06-24

本文共 2192 字,大约阅读时间需要 7 分钟。

5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,有些用户在这块就踩到坑了,多次被拒。下面我们就Apple在这块的规定分析一下,我们的App如何才能避免在这个问题上吃Apple的闭门羹。

IPV6-Only支持解释

IPV6是对IPV4地址空间的扩充。目前我们用iOS设备连上网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IPV6 DNS64/NAT64网络之后,设备被分配的地址会变成IPV6的地址,而这些网络就是所谓的IPV6-Only网络。重点是,目前iOS设备仍然可以通过此网络去获取IPV4地址提供的内容。客户端向服务器端请求域名解析,首先通过DNS64 Server查询IPv6的地址,如果查询不到,再向DNS Server查询IPv4地址,通过DNS64 Server合成一个IPV6的地址,最终将一个IPV6的地址返回给客户端。如图所示:

a93c28d36fc900887d0166b63aa08dc2

在Mac OS 10.11+的双网卡的Mac机器(以太网口+无线网卡),我们可以通过模拟构建这么一个local IPv6 DNS64/NAT64 的网络环境去测试应用是否支持IPV6-Only网络,大概原理如下:

c6d5ddc3d13bd5845245b380a8730447

具体的搭建方法请参考:

Apple如何审核支持IPV6-Only

Apple说的支持IPV6-Only网络,其实就是说让应用在 IPv6 DNS64/NAT64 网络环境下仍然能够正常运行。我们目前的实际网络环境仍然是IPV4网络,应用需要能够同时保证IPV4和IPV6环境下的可用性。

Apple官方声明iOS9开始向IPV6支持过渡,在iOS9.2+支持通过getaddrInfo方法将IPV4地址合成IPV6地址(The ability to synthesize IPv6 addresses was added to getaddrinfo in iOS 9.2 and OS X 10.11.2)。苹果的审核部门表示,只需要应用在苹果最新的系统上保证IPV6的兼容性即可。

如果应用一直直接使用IPV4地址通过NSURLConenction或者NSURLSession进行网络请求(一般需要服务器允许,且客户端需要在header中伪装host);经测试,IPV6网络环境下,直接使用IPV4地址在iOS9及以上的系统仍然能够正常访问;在iOS8.4及以下不能正常访问;这一点苹果的解释和建议是这样的:

Note: In iOS 9 and OS X 10.11 and later, NSURLSession and CFNetwork automatically synthesize IPv6 addresses from IPv4 literals locally on devices operating on DNS64/NAT64 networks. However, you should still work to rid your code of IP address literals.

应用如何支持IPV6-Only?

对于如何支持IPV6-Only,官方给出了如下几点标准:

1.Use High-Level Networking Frameworks;

2.Don’t Use IP Address Literals;
3.Check Source Code for IPv6 DNS64/NAT64 Incompatibilities;
4.Use System APIs to Synthesize IPv6 Addresses;

官方对 High-Level Networking Frameworks有以下解释:

using high-level networking APIs such as NSURLSession and the CFNetwork frameworks and you connect by name, you should not need to change anything for your app to work with IPv6 addresses

可以明确的是NSURLSession和CFNetwork是支持IPV6的, 经过测试,NSURLConnection在最新的iOS9系统上是支持IPV6的。

结论

API网关的SDK使用的是苹果提供的High-Level Networking Frameworks:NSURLSession进行的网络访问,并且使用的都是域名方式访问,完全支持IPV6-Only的网络环境,可以放心使用。

如果你的App只使用了API网关的SDK进行网络访问,那么你的App上架申请时不会因为不支持IPV6-Only的网络环境而被拒绝。如果因为IPV6 ONLY问题被拒绝,请查找自己的其他代码,看看是否有其他的网络访问代码。

如果你的App还访问了其他网络,请在网络访问时确认以下两点:

  1. 使用High-Level Networking Frameworks(NSURLSession,CFNetwork frameworks)来访问网络,并且使用域名,不要使用IP。
  2. 如果必须使用ip来访问网络,对IP进行IPV6的处理后使用。

转载地址:http://ppyyo.baihongyu.com/

你可能感兴趣的文章
利用Hibernate 框架,实现对数据库的增删改查
查看>>
mysql开启远程连接权限
查看>>
关于商米D1S,USB默认权限在关机后丢失的FAQ
查看>>
css3 text-transform变形动画
查看>>
scikit-learn中文api
查看>>
一个完整的大作业--广州市社会保障(市民)卡服务网
查看>>
迭代器和生成器
查看>>
Vue 组件之间传值
查看>>
指向方法之委托(一)
查看>>
2013 Multi-University Training Contest 3 部分解题报告
查看>>
Linux 网桥配置命令:brctl
查看>>
jQuery中异步操作对象Deferred
查看>>
MVC设计模式
查看>>
在团队项目遇到的问题及解决方法。
查看>>
springcloud demo---config-client
查看>>
Django设置联合唯一约束 -- migrate时报错处理
查看>>
Java LeetCode 1.Two Sum
查看>>
前端面试题:css相关面试题
查看>>
shell命令的高级使用之---选择性copy
查看>>
最长回文子序列-----动态规划
查看>>