iPhone应用程序,当他们没有连接到互联网时提醒用户?

时间:2011-09-26 22:28:36

标签: iphone xcode uiwebview alert reachability

编码警报时,有什么简单的方法可以在用户未连接到互联网时发出警告?我正在使用Xcode,现在当没有连接时,它只是uiwebview中的白色屏幕。

3 个答案:

答案 0 :(得分:6)

在这里你可以检查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];
}

答案 1 :(得分:3)

如果您的应用需要持久的互联网连接,则可以在plist文件中包含密钥UIRequiresPersistentWiFi。使用此功能,iOS将自动在机场模式下向用户显示警报。

此外,iOS将确保您的应用程序位于前台时无法关闭/休眠wifi收音机。

答案 2 :(得分:0)

请注意,互联网连接在移动设备上非常动态(多个无线电,多个接入点,多个手机信号塔,旅行,竞争无线电干扰,“你拿错了”等),因此可达性不是很完美解决方案,因为网络连接通常可以在可达性执行检查之前,期间或之后进行更改。可达性可以直接说谎(是的,我们连接到接入点,即使宽带在接入点的另一侧死亡)也是如此。 Reachability报告没有连接也很常见,就像它自己的请求在几秒钟后打开无线电以获得良好的连接一样。

最好的办法就是尝试从网络访问数据,在等待时旋转活动指示器,并为用户提供一些API元素,如果他们最终等待的时间过长,可以放弃他们的