我的一个客户想要在代理后面使用我们的 iPadOS 应用程序。虽然与 Firebase 的所有正常连接均有效,但对 Firestore 的所有订阅均无效。客户反映,他们可以在防火墙中看到一些连接绕过http代理(WinGate),直接使用tcp,然后被防火墙阻止。与代理的连接在 iPad 设置中配置。
所以我的问题是,是否可以通过http代理进行订阅,或者直接使用http,这应该已经强制它通过代理。有趣的是,我们的应用程序的网络版本使用相同的 firebase 后端,可以正常工作。非常感谢任何指点!
我能够通过以下步骤重现该问题:
这样,所有流量都必须经过代理。可以通过直接在防火墙中阻止 iPad IP 来实现类似的设置。
通过此设置,我无法使任何 Firestore 订阅正常工作。
但是,当将以下代码添加到AppDelegate时
if let proxySettingsUnmanaged = CFNetworkCopySystemProxySettings() {
let proxySettings = proxySettingsUnmanaged.takeRetainedValue()
if let ip = (proxySettings as NSDictionary)["HTTPSProxy"] as? String,
let port = (proxySettings as NSDictionary)["HTTPSPort"] as? Int {
setenv("grpc_proxy", "http://\(ip):\(port)", 1)
}
}
连接再次正常工作。我从
grpc 参考中获得了环境变量
grpc_proxy
的参考。