iOS 9将使用仅IPv6网络。为了支持IPv6,我的iOS应用程序必须停止使用AF_INET(以及许多其他api,例如struct in_addr),而是使用AF_INET6。
但它也应该支持iOS 8及更早版本,因此我必须继续使用AF_INET。问题是如何知道系统使用的是哪个网络,IPv6还是IPv4?所以我可以根据不同的网络条件使用不同的apis。
答案 0 :(得分:1)
在IPv6网络上审核应用。请确保您的应用支持IPv6网络,因为需要IPv6兼容性。
我在AFNetworkReachabilityManager类的AFNetworking Library中使用了此代码,现在它正常工作,我的应用程序已获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;
}
答案 1 :(得分:0)
由于IPv6网络而导致Apple应用拒绝的解决方案
我对IPv6的互联网可访问性检查效果不佳。它总是显示没有网络。当我使用此代码时,苹果在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;
}