【问题标题】:How to reconnect vpn when the network status change from cellular to wifi?当网络状态从蜂窝变为 wifi 时如何重新连接 vpn?
【发布时间】:2019-07-29 01:17:50
【问题描述】:

我正在使用苹果提供的网络扩展开发一个 vpn 应用程序。为了实现自动重连vpn的功能,我使用了扩展的“按需连接”功能,这样即使手机有一段时间没有网络,如果网络恢复,它也会自动重新连接到我的vpn服务器。

但是,当我的应用程序使用蜂窝 (4G) 连接到 vpn 并尝试打开 wifi 时,我发现该应用程序一直在使用蜂窝连接到 vpn 但不使用 wifi。请问连接vpn时如何将网络从蜂窝切换到wifi?


有些网站说在PacketTunnelProviderdefaultPath添加观察者可以观察到网络状态的变化,添加如下代码重启vpn隧道。这样手机就可以使用wifi重新连接我的vpn服务了。

NSLog("Network Environment Changed")
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
    self.startTunnelWithOptions(nil){_ in}
}

但是,即使我使用上面的代码,当网络状态从蜂窝变为 wifi 时,我的应用程序也无法重新启动 vpn 隧道。

希望任何人都可以回答我的问题。谢谢。

【问题讨论】:

    标签: ios swift vpn networkextension


    【解决方案1】:

    您可以使用func cancelTunnelWithError(_ error: Error?) 停止隧道, 由于您还使用'按需连接'隧道将在下一次网络调用时自动建立。

    要检测网络变化,您可以使用 Rechibility

    【讨论】:

    • VPN 更改时是否会触发可达性?
    • 是的,它会着火的。
    猜你喜欢
    • 2020-12-02
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2017-07-30
    • 2017-04-01
    相关资源
    最近更新 更多