iOS 应用程序在调用 Web 服务最佳实践之前确保互联网可用

标签 ios objective-c web-services mobile afnetworking-2

我目前正在 iOS 中开发一个应用程序,它完全依赖网络服务通过 HTTP 从服务器获取数据并显示在应用程序上。因此,应用程序的互联网访问是保持应用程序流畅运行的主要关注点。另外,如果没有网络访问,当应用程序重新访问网络时,部分内容需要通过调用网络服务来刷新。

此外,我的公司使用普通服务器,它没有谷歌服务器那么强大,所以有时它可能没有响应或连接错误返回到应用程序。我的主管建议在调用每个 Web 服务之前,应用程序应该 ping 我们的服务器,以检查我们的服务器是否可以调用 Web 服务。

根据我的研究,iOS 没有任何内置方法来确保设备可以访问互联网,所以我使用 Tony MillionReachability 库来检查是否可以访问 google.com 以确保有互联网连接,然后我创建一个 NSMutableURLRequest,超时为 5 秒以尝试连接到我们的服务器,如果有响应则只开始网络服务请求。

这是我的逻辑的伪代码:

IF google.com is reachable
   IF ourserver.com is reachable
       Call the web service
   ELSE
       Prompt to user 'Server is busy, please try again later'
ELSE
   Prompt to user 'No internet accessed, please try again.'

这种方法在应用程序调用每个网络服务之前使用,但是,它使操作看起来延迟或响应缓慢,我猜这是我们的服务器响应缓慢造成的。

为了解决应用程序重新获得互联网访问权限时刷新内容的问题,我找到了另一个名为 AFNetworking 的库,它为应用程序提供了丰富的网络相关功能。我可以使用 [[AFNetworkReachabilityManager sharedManager] startMonitoring];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNetworkChangeNotification:) name:AFNetworkingReachabilityDidChangeNotification object:nil];知道设备有网络状态的变化。但是,这种方法只能知道设备是否连接到网络,而不能检测网络是否可以访问互联网。因此,我计划使用我之前提到的 Reachability 进行 Internet 访问检查,以重新调用 Web 服务。下面是伪代码

Network Changed Called
    IF [AFNetworkReachabilityManager sharedManager].reachable]
        IF google.com is reachable
           IF ourserver.com is reachable
               Call the web service
           ELSE
               Prompt to user 'Server is busy, please try again later'
        ELSE
           Prompt to user 'No internet accessed, please try again.'
    ELSE
        Prompt to user 'No internet accessed, please turn on Wifi or 3G.'

但是,这种方法似乎不切实际,因为它需要进行多次检查,而且似乎影响了应用程序的性能。另外我在想,我们对服务器进行超时检查是一个好方法,因为有些用户使用 3G 连接,用户连接到我们的服务器可能需要一些时间,所以这似乎不是一个好方法。有些人建议 AFNetworking 可达性足以检查是否已访问互联网,他们假设连接到网络的设备 == 已访问互联网。因此,如果用户确实没有访问互联网但他们已连接到网络,应用程序仍应继续调用网络服务并让它落入异常并相应地提示消息。

这里的任何人都可以给我一些建议或指导,说明从移动设备调用 Web 服务来处理我遇到的问题的最佳做法吗?提前致谢并感谢。

最佳答案

你问了很多好问题,但如果不写一篇完整的文章,就不容易在这里回答。这里有一个很棒的视频:https://realm.io/news/tmi-active-internet-connection-ios/还有一些值得您查看的 StackOverflow 优秀文章:Easiest way to detect Internet connection on iOS? , How to check for an active Internet connection on iOS or OSX? .

关于iOS 应用程序在调用 Web 服务最佳实践之前确保互联网可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34169177/

相关文章:

ios - 在 Swift 中使用关键字过滤数组数组

iphone - 什么时候释放 UIImage?

c - 初始化窗口代码 Mac OS X

ios - 将弧存储在变量中

ios - Appium iOS Safari 打开新标签,接受提醒并在两个标签之间切换

objective-c - 如何用 Objective-C 替换 &ndash

iOS 应用不断增加内存?(内存崩溃)DidReceiveMemoryWarning

java - Jax-ws 端点不要求创建包装类

没有 IIS 的 c# rest webservice

c# - wcf服务回调异常的处理方法