我正在开发一个需要VPN连接进行数据同步的应用程序。我正在使用可达性类来检查主机可用性。
@功能性:-当应用程序通过 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;
}

最佳答案

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

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

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

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

    关于ios - 可达性类别不适用于VPN连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11428590/

    10-16 11:38