【发布时间】:2011-11-25 14:26:55
【问题描述】:
编写警报以在用户未连接到 Internet 时发出警告的简单方法是什么?我正在使用 Xcode,现在没有连接时它只是 uiwebview 中的白屏。
【问题讨论】:
标签: iphone xcode uiwebview alert reachability
编写警报以在用户未连接到 Internet 时发出警告的简单方法是什么?我正在使用 Xcode,现在没有连接时它只是 uiwebview 中的白屏。
【问题讨论】:
标签: iphone xcode uiwebview alert reachability
如果您的应用程序需要持续的互联网连接,您可以在 plist 文件中包含密钥 UIRequiresPersistentWiFi。使用此功能,iOS 将在机场模式下自动向用户显示警报。
此外,iOS 将确保当您的应用处于前台时,wifi 无线电不会关闭/休眠。
【讨论】:
在这里您可以检查 wifi 是否有连接、3g 或完全没有:
if ([[Reachability reachabilityWithHostName:@"google.com"] currentReachabilityStatus] == ReachableViaWiFi) {
// Do something that requires wifi
} else if ([[Reachability reachabilityWithHostName:@"google.com"] currentReachabilityStatus] == ReachableViaWWAN) {
// Do something that doesnt require wifi
} else if ([[Reachability reachabilityWithHostName:@"google.com"] currentReachabilityStatus] == NotReachable) {
// Show alert because no wifi or 3g is available..
}
Apple 在此处提供所有必要的 Reachability api/source:Reachability Reference
我在所有项目中都为自己制作了这些自定义便利功能:
+ (BOOL)getConnectivity {
return [[Reachability reachabilityWithHostName:@"google.com"] currentReachabilityStatus] != NotReachable;
}
+ (BOOL)getConnectivityViaWiFiNetwork {
return [[Reachability reachabilityWithHostName:@"google.com"] currentReachabilityStatus] == ReachableViaWiFi;
}
+ (BOOL)getConnectivityViaCarrierDataNetwork {
return [[Reachability reachabilityWithHostName:@"google.com"] currentReachabilityStatus] == ReachableViaWWAN;
}
并像这样使用:
if ([ServerSupport getConnectivity]) {
// do something that requires internet...
else {
// display an alert
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Network Unavailable"
message:@"App content may be limited without a network connection!"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil] autorelease];
[alert show];
}
【讨论】:
请注意,移动设备上的互联网连接是非常动态的(多个无线电、多个接入点、多个蜂窝塔、旅行、相互竞争的无线电干扰、“你拿错了”等),因此可达性并不完美解决方案,因为网络连接经常会在 Reachability 执行其检查之前、期间或之后发生变化。可达性可能完全是谎言(是的,我们连接到一个接入点,即使接入点另一侧的宽带已死,也是如此)。 Reachability 报告没有连接也很常见,就像它自己的请求打开无线电以在几秒钟后获得良好的连接一样。
最好的办法是尝试从网络访问数据,在等待时旋转一个活动指示器,并在他们的中为用户提供一些 API 元素以在他们最终等待太久时放弃strong> 意见,而不是某些开发人员的意见...他们比您更清楚在他们的区域内建立(重新)连接需要多长时间,以及他们愿意等待多长时间。
【讨论】: