7

我正在开发一个需要 VPN 连接以进行数据同步的应用程序。我正在使用可达性类来检查主机可用性。
@Functionality :- 当应用程序通过Junos Pulse应用程序连接到 VPN 时,如果 VPN 连接丢失,数据同步应该继续,它应该抛出警报消息。现在它适用于下面给出的场景。
@工作场景:- VPN 最初已连接,我完成了同步,然后手动从 Junos Pulse 断开 VPN。现在我正在尝试再次同步它正在引发预期的警报。
@问题场景:-我最初完成了同步并让应用程序空闲以自动断开 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;
}
4

1 回答 1

1

好像iOS有bug。当您使用蜂窝连接(或 WiFi)连接 VPN,然后切换到 WiFi(或蜂窝)时,系统不会检测到这一点。Reachability 不会发布任何通知,因为 iOS 仍然认为您尚未切换界面。

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

  1. 使用 NetworkExtension 框架在 3G 上连接 VPN,禁用按需。
  2. 切换到 WiFi 网络。
  3. 从 WiFi 路由器上拔下以太网电缆,因此路由器无法共享 Internet。
  4. 检查具有活动 VPN 的设备上是否有 Internet。

它就在那里。这意味着,所有流量都来自蜂窝网络。

于 2016-05-30T14:29:37.557 回答