Reachability Class无法正常用于VPN连接

时间:2012-07-11 08:32:41

标签: ios vpn reachability

我正在开发一个需要VPN连接才能进行数据同步的应用程序。我正在使用可达性类来检查主机的可用性  @Functionality: - 当应用程序通过 Junos Pulse 应用程序连接到VPN时,如果VPN连接丢失,应继续进行数据同步,它应该抛出Alert消息。现在它正在为下面给出的场景工作  @Working场景: - VPN最初连接,我完成了同步,然后从Junos Pulse手动断开了VPN。现在我想再次同步它正在投掷预期的警报 @Problem Scenarion: - 我最初完成了同步并让应用程序空闲以自动断开VPN连接。现在VPN消失之后我又想再次同步。它没有通过VPN不在那里的警报。它尝试同步功能并失败,因为没有VPN就无法访问服务器。

通过在互联网上搜索它的解决方案我很累。我在这里粘贴我的代码片段。任何建议都受到高度赞赏。

-(BOOL)checkHostAvailability
{   
Reachability *objReach = [Reachability reachabilityWithHostName:[self hostServer]];
NetworkStatus hostAvailability = [objReach currentReachabilityStatus];
if(hostAvailability == ReachableViaWiFi || hostAvailability == ReachableViaWWAN) {
    RLog(@"Host is Reachable");
    return YES;
}
return NO;
}

1 个答案:

答案 0 :(得分:1)

似乎iOS中存在一个错误。当您使用蜂窝连接(或WiFi)连接VPN然后切换到WiFi(或蜂窝)时,系统不会检测到此情况。可达性不会发布任何通知,因为iOS仍然认为您没有切换您的界面。

我设法通过以下方式重现它:

  1. 使用NetworkExtension框架在3G上连接VPN,禁用按需。
  2. 切换到WiFi网络。
  3. 从WiFI路由器上拔下以太网线,因此路由器无法共享Internet。
  4. 检查具有活动VPN的设备上是否有Internet。
  5. 它就在那里。这意味着,所有流量都来自蜂窝网络。