API网关的iOS SDK已经支持 IPV6

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

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

具体的搭建方法请参考:

https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1

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的处理后使用。
目录
相关文章
|
2月前
|
Java API 开发工具
支付与银行业线上客户协议应用中的DocuSign集成方式选择——SDK和API
跨境支付公司和Docusign进行集成时,碰到问题时的解决方案。分别用SDK和API集成后的各自使用体验。
42 2
支付与银行业线上客户协议应用中的DocuSign集成方式选择——SDK和API
|
7月前
|
开发工具 iOS开发
iOS 支付宝SDK比较隐秘的坑
iOS 支付宝SDK比较隐秘的坑
113 0
|
7月前
|
网络协议 iOS开发
iOS 给服务器添加 ipv6 支持 以通过苹果审核
iOS 给服务器添加 ipv6 支持 以通过苹果审核
55 0
|
6月前
|
安全 API 开发工具
获取仓库列表接口可以通过SDK或者REST API两种方式调用
获取仓库列表接口可以通过SDK或者REST API两种方式调用
50 2
|
2月前
|
Web App开发 前端开发 JavaScript
如何快速与呼叫中心系统CTI/API/SDK接口集成
由于呼叫中心系统涉及通信、CTI、终端设备、中继线路等技术与概念,从事信息管理系统、ERP、CRM、工单系统等的研发人员一般不是非常熟悉这部分技术,当需要提供具备呼叫中心能力的解决方案时,往往要用较多的时间来研究这些相对复杂的技术,对接过程比较长,开发调试有一定的阻力,基于此,我们提出一种更加简便高效的集成方法,可以零代码集成呼叫中心平台,实现项目快速上线。
如何快速与呼叫中心系统CTI/API/SDK接口集成
|
7月前
|
JavaScript API 开发工具
SAP Marketing Cloud Restful API SDK 使用案例分享
SAP Marketing Cloud Restful API SDK 使用案例分享
67 0
|
3月前
|
缓存 JSON API
IOS网络编程:什么是 RESTful API?如何使用 RESTful 风格设计 API?
IOS网络编程:什么是 RESTful API?如何使用 RESTful 风格设计 API?
39 3
|
3月前
|
存储 API 开发工具
如何使用Python SDK与OpenAI Assistants API构建助手?
在这篇文章中,我们将介绍如何使用Python SDK构建最基本的Assistant,你只需要在代码中添加你自己的OpenAI API密钥即可。
111 0
|
9月前
|
文字识别 API 语音技术
百度语音技术:文字识别转化为语音在线API和PHP-SDK开发文档的学习
百度语音技术:文字识别转化为语音在线API和PHP-SDK开发文档的学习
64 0
|
7月前
|
运维 网络协议 测试技术
iOS 自己搭建的IPv6环境测试正常,任然被拒
iOS 自己搭建的IPv6环境测试正常,任然被拒
48 0