我应该啥时候检查互联网连接

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)

【讨论】:

以上是关于我应该啥时候检查互联网连接的主要内容,如果未能解决你的问题,请参考以下文章

如何用c检查互联网连接?

使用 AFNetworking 检查 Internet 连接状态

使用来自 apollo-link-ws 的 WebSocketLink 检查互联网连接

NSURLSession 啥时候运行?

网络超时啥意思?

我如何检查我的设备是否与互联网连接