API网关的iOS SDK已经支持 IPV6

本文涉及的产品
云原生 API 网关,700元额度,多规格可选
简介: 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月前
|
编译器 API 定位技术
API和SDK的区别
API 和 SDK 的区别在于:API 是一组定义了软件组件之间交互规范的接口,用于实现不同软件组件之间的通信;而 SDK 是一个全面的工具集合,包含 API、编译器、调试器、文档等,用于特定平台的应用程序开发。SDK 范围更广,内容更丰富,更具体和具象化,适合复杂的开发需求;API 则更加抽象,侧重于功能的定义和调用方式。
|
5月前
|
机器学习/深度学习 API iOS开发
探索iOS开发中的SwiftUI框架深入理解RESTful API设计原则与最佳实践
【7月更文挑战第30天】本文深入探讨了SwiftUI框架在iOS开发中的应用,分析了其对用户界面构建的简化方法及性能优化。通过比较传统UI构建方式与SwiftUI的差异,揭示了SwiftUI如何提高开发效率和用户体验。文章还讨论了SwiftUI在实际项目中的集成策略,并展望了其未来的发展方向。 【7月更文挑战第30天】在数字时代的浪潮中,RESTful API如同一座桥梁,连接着不同的软件系统。本文将探讨RESTful API的核心设计原则,揭示其背后的哲学思想,并通过实例分析展示如何将这些原则应用于实际开发中。我们将从资源定位、接口一致性到HTTP方法的恰当使用,逐一剖析,旨在为开发者提供
68 1
|
2月前
|
存储 自然语言处理 API
HarmonyOS SDK使用:熟悉HarmonyOS提供的开发工具和API
【10月更文挑战第21天】随着智能设备的普及,操作系统的重要性日益凸显。华为推出的HarmonyOS凭借其跨平台、分布式特性受到广泛关注。本文将从开发工具、API使用、SDK更新维护及社区支持等方面,探讨HarmonyOS SDK的使用,旨在帮助开发者高效利用这一强大平台,开启鸿蒙应用开发之旅。
62 5
|
5月前
|
开发工具 iOS开发 计算机视觉
|
2月前
|
编译器 API 定位技术
API和SDK的区别
API(应用程序编程接口)和SDK(软件开发工具包)的主要区别在于范围、内容、抽象程度及使用方式。API定义了软件组件间的交互规则,范围较窄,更抽象;而SDK提供了一整套开发工具,包括API、编译器、调试器等,范围广泛,具体且实用,有助于提高开发效率。
|
4月前
|
API 开发工具 图形学
PicoVR Unity SDK⭐️五、常用API接口函数一览
PicoVR Unity SDK⭐️五、常用API接口函数一览
|
4月前
|
开发工具 iOS开发 容器
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
|
4月前
|
JSON Java API
【Azure API 管理】通过Java APIM SDK创建一个新的API,如何为Reqeust的Representation设置一个内容示例(Sample)?
【Azure API 管理】通过Java APIM SDK创建一个新的API,如何为Reqeust的Representation设置一个内容示例(Sample)?
|
4月前
|
开发工具 图形学 iOS开发
Unity与IOS⭐Unity接入IOS SDK的流程图
Unity与IOS⭐Unity接入IOS SDK的流程图
|
4月前
|
缓存 JavaScript 前端开发
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)更新时间(2020-10-29)