我应该啥时候检查互联网连接
Posted
技术标签:
【中文标题】我应该啥时候检查互联网连接【英文标题】:When should I check for internet connectivity我应该什么时候检查互联网连接 【发布时间】:2011-12-28 19:22:47 【问题描述】:我的 iPhone 应用程序需要互联网才能运行。
是否应该在每次执行 Internet 功能时检查连接? 或者我应该使用我的 appDelegate 来监听来自可达性类之类的消息,以确定连接是否丢失并警告用户?
什么更好?
这是我迄今为止在我的应用委托中所做的:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
reachability = [[Reachability reachabilityWithHostName:[NSString stringWithFormat:@"http://%@/iSql/" ,[[NSUserDefaults standardUserDefaults] stringForKey:@"serviceIPAddress"]]] retain];
[reachability startNotifier];
return YES;
- (void)reachabilityChanged:(NSNotification *)note
NetworkStatus ns = [(Reachability *)[note object] currentReachabilityStatus];
if (ns == NotReachable)
if (![networkAlert isVisible])
if ([self networkAlert] == nil)
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"\n\nNo Internet Connection" message:@"You require an internet connection to retrieve data from the server." delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
[self setNetworkAlert:alert];
[alert release];
[networkAlert show];
else
if ([self networkAlert] != nil)
[networkAlert dismissWithClickedButtonIndex:0 animated:YES];
【问题讨论】:
【参考方案1】:至少一位 Apple 技术演讲演示者建议在大多数情况下不要检查可达性,只需触发异步网络请求,通知用户(通过某种类型的活动指示器)应用程序正在等待网络响应,并给出如果他们认为他们已经等待了足够长的时间,而不是锁定 UI 或应用程序,则用户可以选择。
原因是,在移动的移动设备上,网络可以而且经常会在可达性测试和任何实际数据请求之间上升。因此,用户将被误导。在通知用户存在连接后,网络也可能会关闭,这可能会更糟。
Plus Reachability 仅告诉您最近/第一个网络跃点的连接性,这可能会或可能不会提供与互联网其余部分或目标站点的连接性。常见的例子可能是所有那些配置错误的 WIFI 接入点。
锁定用户界面,并且在等待足够长的时间后不给用户任何选项很可能是拒绝的理由,无论您是否首先检查了可达性。
【讨论】:
我喜欢这个答案 - 我曾与 Apple 进行过类似的技术讲座,推荐了这个答案。根据另一个答案,我不一定建议使用UIAlertView
阻止整个应用程序,我认为这不是很友好!【参考方案2】:
这真的取决于您的应用程序。您可以同时执行以下两种操作:在互联网不可用时禁用功能并通知用户。
我更喜欢在没有互联网连接时更改 UI,并且在启动任何需要连接的方法之前确保有连接。
【讨论】:
【参考方案3】:我推荐:
1) 在发出任何互联网请求并适当处理之前,请务必检查互联网连接。 2) 有一个轮询机制来检查可达性。如果无法访问,可能会警告用户并禁用发出 Internet 请求的程序部分。也许称之为“离线模式”。
【讨论】:
问题是我的应用在没有连接的情况下毫无用处。我宁愿有一种从 appDelegate 禁用应用程序的方法......也许我可以在没有按钮的情况下显示通知,并且只有在网络恢复时才将其删除...... 所有设置都在手机设置应用程序中处理。我现在的问题是如何在显示警报后解除警报。因为警报在显示后被释放。 我想在没有网络的情况下停止所有用户交互,因为应用程序完全没用......因此 uialertview 是完美的! 让您的应用在没有 Internet 连接时有用,只要给用户一个选项来查看帮助或信息视图,甚至是一个广告,说明您的应用在有连接时有多棒。 【参考方案4】:检查互联网在技术上由开发者决定,但 Apple 过去曾拒绝应用程序,因为它没有通知用户互联网连接不可用。
http://mobileorchard.com/avoiding-iphone-app-rejection-from-apple/ (#6)
【讨论】:
以上是关于我应该啥时候检查互联网连接的主要内容,如果未能解决你的问题,请参考以下文章
使用 AFNetworking 检查 Internet 连接状态