Reachability Class无法正常用于VPN连接

Gan*_*alf 7 vpn reachability ios

我正在开发一个需要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;
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*nov 1

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

\n\n

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

\n\n
    \n
  1. 使用 NetworkExtension 框架在 3G 上连接 VPN,禁用点播。
  2. \n
  3. 切换到 WiFi 网络。
  4. \n
  5. 拔掉 WiFI 路由器上的以太网线,因此路由器可以\xe2\x80\x99t 共享互联网。
  6. \n
  7. 检查设备上是否有\xe2\x80\x99s Internet 且具有活动VPN。
  8. \n
\n\n

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

\n