我不是在谈论可达性。
我所说的是如何通过蜂窝接口从iOS设备创建网络连接。
为什么呢?因为我有条件,设备连接到WiFi接入点,所以它选择WiFi ...但该接入点没有互联网连接,无处可去。我有数据,我必须尽一切努力提供,有些情况下它会在WiFi网关中丢失以进行炼狱。在使用Reachability和依赖MPTCP的两种情况下,Apple已经优先考虑堆栈中的WiFi。
我知道NSURLSessionConfiguration
可以将allowsCellularAccess
设置为允许蜂窝访问 - 我正在寻找要求蜂窝网络进行路由。
即使在CFNetwork
级别,我正在查看kCFStreamPropertyConnectionIsCellular
状态,kCFStreamPropertyNoCellular
禁用手机。
无论如何我都找不到优先考虑的蜂窝收音机。我意识到Apple已经不遗余力地喜欢WiFi,而我却反对这一点 - 这就是为什么我很难找到答案。
我想把它保持在可可级别,但不反对进入基础或更深层次。我想避免尝试解析接口表(如果它甚至可访问)以找出哪个是蜂窝接口。
有没有人成功地通过蜂窝链路建立了网络连接,尽管WiFi似乎存在?
Multipath TCP的某些配置是否为答案?
答案 0 :(得分:0)
要绑定到特定接口,据我所知,你必须一直下降到原始套接字级别,并且没有办法为NSURLSession目的提供自定义套接字,所以你' d基本上是从头开始重写。您应该提交一个错误,要求支持将NSURLSession绑定到源IP。
您遇到的行为是iOS和断开网络的已知问题。 iOS 9及更高版本做得更好,但即便如此,它们也会出现问题;设备有时拒绝与Wi-Fi网络通话,有时拒绝与蜂窝网络通话。具体来说,如果任何一个信号都很弱,它似乎都会失败。就在今天早上,我实际上不得不强迫我的iPhone(iOS 10)通过将其置于飞行模式并仅启用Wi-Fi来与断开的Wi-Fi网络通信。
我被告知您可以通过将网络的DHCP服务器配置为不提供路由器广告来解决此问题;那说,每次我尝试过,iOS设备都会不断要求提供优惠。也许这个bug在某些时候得到修复。如果是这样,它可能值得一试,但不要指望它适用于旧版本的iOS。
如果不这样做,假设您不需要支持iOS 3及更早版本中的Web浏览器,您可以尝试完全取消该Wi-Fi网络上的DHCP服务器,并且只依赖于使用零配置IP的DNS服务发现。这样,设备将不会看到路由器,并且除了那些链路本地IP之外,它不会尝试从该接口发送数据。
如果出于某种原因无法做到这一点,通常我会建议使用libcurl的自定义副本,但我怀疑这会对您的情况有效,因为POSIX网络不会唤醒蜂窝硬件。
答案 1 :(得分:0)
在iOS 12及更高版本中,您可以使用Network Framework。示例代码为here。