2016 年 5 月 27 日
Apple iOS 和 IPv6 截止日期
从 2016 年 6 月 1 日开始,Apple 将开始强制执行一项新政策,您可能需要注意。如果您的应用执行任何网络操作,例如打开 WebView,执行 network.request(),或使用 LuaSocket 与其他服务器或设备通信,请继续阅读。 如果您没有这样做,您只需要了解以下内容:
总结:所有应用在 2016 年 6 月 1 日之后都必须符合 IPv6 标准。
一点历史
长期以来,互联网一直使用四字节 (0–255) IP 地址来表示每个连接的设备。 在网络术语中,这被称为 IPv4。 您可能很熟悉它们,因为它们看起来像 192.168.1.15。这个数字池是全球资源,互联网已经用完了。
在过去的几年里,互联网一直在转向一种不同的方式来为您的计算机、手机、平板电脑和智能设备提供唯一的地址。 这个新系统被称为 IPv6,它有一个相当大的数字池,在很长一段时间内都不会用完。
由于互联网已经用完了 IPv4 地址,现在有一些资源只能通过其 IPv6 地址来识别。 Apple 希望确保您的应用都能使用新的网络编号。 从 2016 年 6 月 1 日开始,任何新提交或更新的应用都必须在仅允许 IPv6 地址的网络上工作。
这对您意味着什么?
您不能再使用 IP 地址代替服务器名称。 这适用于从 WebViews 到套接字调用的所有类型的网络。 有时,使用服务器的 IP 地址(例如 192.168.212.15)而不是服务器名称(例如 www.example.com)更容易,但现在不允许这样做。 如果您当前正在使用 IP 地址作为服务器,并且需要切换,请在 Internet 上搜索 动态 DNS,您会找到各种将服务器名称映射到 IP 地址的服务。 如果您已经有域名,请查看您注册商处的 DNS 设置,这将允许您设置自己的映射。
Corona SDK 有两个您的应用可能正在使用的底层网络层:network.* API 调用和 socket.* 库。 network.* API 调用已经与 IPv6 兼容了一段时间。 如果您使用的是最新的公共版本并且仅使用这些函数,那么从 Corona 的角度来看,您应该没问题。 但是,如果您使用服务器的 IP 地址而不是服务器名称连接到服务器,则需要停止使用 IP 地址并改用服务器名称。
如果您正在使用 socket.*,则需要获取 Daily Build 2016.2883 或更高版本并重新构建您的应用。 本质上,此版本已升级到支持 IPv6 的最新 LuaSocket 库。
您如何知道自己是否正在使用套接字?
如果您正在使用第三方插件或库,则可能需要确保它们按预期工作。如果您正在进行任何点对点连接(其中两个设备在不通过网络服务器的情况下相互通信),或者正在实现您自己的 FTP 文件传输,则您使用的库可能需要更新以避免使用 IP 地址。
如果您正在使用 LuaSocket,让我们看一些需要更改的典型代码
|
1 2 3 4 5 6 7 |
local socket = require( "socket" ) local serverName = "ipv4.test-ipv6.com" local server_address, mesg = socket.dns.toip( serverName ) -- IPv4 print( "server_address: ", serverName, server_address, mesg ) |
由于 socket.dns.toip() 调用仅适用于 IPv4 地址,因此需要将其更改为更现代的等效项
|
1 2 3 4 5 6 |
local socket = require( "socket" ) local serverName = "ipv6.test-ipv6.com" local addr_info, mesg = socket.dns.getaddrinfo( serverName ) print( "server_address: ", addr_info[1].addr, mesg ) |
如果您已经更改为(或开始使用)更现代的 socket.dns.getaddrinfo() 样式调用,那么您应该可以正常工作了。
结论
在可预见的未来,iOS 将能够与 IPv4 站点通信。 但是,如果您的应用使用 Internet 的唯一方式是使用 IPv4,则 Apple 将不会批准您的应用或任何更新。 Apple 不会下架任何应用,因此您无需更新现有应用。 但是,您提交的任何更新或新应用都将受此政策的约束。
要了解更多信息,请阅读 Apple 关于此问题的开发者文档。

Mileni
发布于 01:01,5 月 28 日这将如何影响 Coronium? 我可以在 DO 上注册一个域,但是 Coronium 是否已为 iPv6 做好准备?
Christian
发布于 08:48,5 月 28 日在 DigitalOcean 上,您可以为您的 droplet 分配一个 IPv6 地址
Kevin
发布于 15:11,6 月 2 日在我的 droplet 上分配了持久 IPv6 地址后,我现在同时拥有 IPv4 和 IPv6 地址。 您知道这是否满足 Apple 的要求吗,因为 coronium 仍然将旧的 IPv4 地址作为 appId?
Rob Miracle
发布于 15:03,6 月 3 日Chris 说 Coronium 在使用 network.request() 方面是安全的,但我不知道该 IP 地址是否正在传递到 network.request 中。 我建议在 Coronium 论坛上提问,网址为 https://forums.coronalabs.com
Jeremiah
发布于 10:11,5 月 31 日这可能会对任何使用像 AutoLAN 这样的旧 P2P 库的应用产生不利影响,因为它们不使用 DNS。 据推测,它们可以很容易地升级为使用 IPv6 API,但需要有人弄清楚。
scottrules44
发布于 10:30,5 月 31 日我需要测试一下,但我认为自动局域网的更新应该仍然有效。我的游戏里有这个功能,很快就要发布了。如果有人在使用自动局域网时遇到任何问题,请在论坛上私信 @scottrules44 或给我发邮件。
scottrules44
发布于 5月31日 10:32https://forums.coronalabs.com/topic/58394-got-old-auto-lan-to-work/
Max
发布于 6月1日 13:48感谢你对那个问题的完整解答。
Renato - 红滩
发布于 6月10日 09:43我在使用每日构建版 2883 和更新后的 LuaSockets 时遇到了一些严重问题。更多信息请参见此处:https://forums.coronalabs.com/topic/63438-udp-socket-bug-on-daily-build-2883-and-later/