我如何强制iOS应用程序使用3G而不是WiFi?

我想使用一个可以在3G上正常工作的消息协议,但不能通过一些企业防火墙。 即使在WiFinetworking可达的情况下,我的应用程序在无法通过WiFi连接的情况下如何强制使用蜂窝networking?

编辑:阅读通过实现的可达性类后,我仍然不确定这两者是否确实相互排斥。 通过gethostbyname()可以发现两个接口,我可能会试着去看看会发生什么。

使用getifaddrs枚举networking接口。 寻找以“pdp”开头的ifa_name。 这将是蜂窝接口(例如,pdp_ip0)。 testing(ifa_flags&IFF_UP)以确保接口已启动,并从ifa_addr获取IP地址。 然后使用bind()将套接字绑定到该地址。

不知道如何激活蜂窝接口,如果它尚未启动。 通常情况下,我只是做一个高层次的http调用来让iOS唤醒networking,但不知道在什么情况下蜂窝服务在wifi也可用的情况下变成活动的。 我怀疑它通常是作为无线的后备。

http://iphonedevsdk.com/discussion/comment/120957

从这个线程的外观来看,似乎是不可能的。 您最好的select可能是尝试使用协议,并说“如果无法正常工作,请断开WiFi连接并重试”。

这个线程说几乎相同的事情:

如何以编程方式启动iPhone上的3G连接?

您可以使用苹果编写的Reachability类来testingnetworking连接当前是否通过3G或WiFi,甚至可以检查networking上的特定资源是否可用。