如何测试 iOS 设备网络是使用 IPv6 还是 IPv4?

Posted

技术标签:

【中文标题】如何测试 iOS 设备网络是使用 IPv6 还是 IPv4?【英文标题】:how to test iOS device network is using IPv6 or IPv4? 【发布时间】:2015-12-24 09:23:33 【问题描述】:

ios 9 将使用纯 IPv6 网络。为了支持 IPv6,我的 iOS 应用程序必须停止使用 AF_INET(以及许多其他 api,例如 struct in_addr),而是使用 AF_INET6。

但它应该也支持iOS 8及更早版本,所以我不得不继续使用AF_INET。问题是如何知道系统使用的是哪个网络,IPv6 还是 IPv4?所以我可以根据不同的网络情况使用不同的api。

【问题讨论】:

在某些使用 AF_INET6 的系统上将同时支持 IPv4 和 IPv6。我不知道iOS是不是这样。 iOS 9 并不意味着手机或运营商将仅支持 IPv6。但这是一种可能。请参阅Apple's web site 了解更多信息。 【参考方案1】:

应用在 IPv6 网络上进行审核。请确保您的应用支持 IPv6 网络,因为需要兼容 IPv6。

我已在 AFNetworkReachabilityManager 类的 AFNetworking 库中使用此代码,现在它工作正常,我的应用程序已获得 Apple 的批准 :)

+ (instancetype)sharedManager 
static AFNetworkReachabilityManager *_sharedManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^

#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 90000) || (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
    struct sockaddr_in6 address;
    bzero(&address, sizeof(address));
    address.sin6_len = sizeof(address);
    address.sin6_family = AF_INET6;
#else
    struct sockaddr_in address;
    bzero(&address, sizeof(address));
    address.sin_len = sizeof(address);
    address.sin_family = AF_INET;
#endif
    _sharedManager = [self managerForAddress:&address];
);

return _sharedManager;

【讨论】:

【参考方案2】:

由于 IPv6 网络导致 Apple 应用被拒绝的解决方案

我对 IPv6 的互联网可达性检查运行不正常。它总是显示没有网络。当我使用此代码时,Apple 在 24 小时内批准了我的应用程序。 谢谢

AFNetworkReachabilityManager 类中的 AFNetworking 库中更改以下代码行

AF_INET 更改为 AF_INET6;

+ (instancetype)sharedManager 
    static AFNetworkReachabilityManager *_sharedManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^
        struct sockaddr_in address;
        bzero(&address, sizeof(address));
        address.sin_len = sizeof(address);
        address.sin_family = AF_INET6;  //Change AF_INET TO AF_INET6
        _sharedManager = [self managerForAddress:&address];
    );

    return _sharedManager;

【讨论】:

同时支持 IPv4 和 IPv6

以上是关于如何测试 iOS 设备网络是使用 IPv6 还是 IPv4?的主要内容,如果未能解决你的问题,请参考以下文章

iOS应用如何支持IPV6-b

iOS-用手机网络测试Ipv6

iOS 上线因iPv6被拒,查询服务器是否支持iPv6,mac设置iPv6网络,手机测试iPv6

iphone设置ipv6上网

iOS应用支持IPV6

iOS应用支持IPV6,就那点事儿