[英]How to use iOS Reachability
我正在开发一个使用网络的 iPhone 应用程序。 iPhone 通过 HTTP 请求与我的服务器通信,应该可以在 WiFi 和 3G 上工作。
我目前使用NSURLConnection initWithRequest
向我的服务器发送异步请求并获得响应(但我很快就会转向使用ASIHTTPRequest
库)
我知道对于这种应用程序(需要互联网连接的应用程序)我应该(必须?)使用可达性。
在网上搜索并查看 Apple 的 Reachability 示例代码后,我仍然不明白一些基本的东西:
可达性的主要目的是什么?
在苹果的例子中,他们检测主机、WiFi 和 3G 的网络问题,并向用户显示适当的消息。
Reachability 的主要目的是向用户显示消息吗? 或者我需要将它用于其他更实际的场景吗? 例如,如果NSURLConnaction
请求失败,我是否需要以某种方式使用可达性来重新发送请求?
什么是可达性的正确使用?
应用程序启动时只使用一个实例,然后监听网络变化是否很常见? 或者我应该在每次网络请求之前检查自己的可达性状态?
使用reachabilityWithHostName
就足够了吗,还是我还需要reachabilityForLocalWiFi
和reachabilityForInternetConnection
?
还有一件事,我知道苹果可以拒绝使用网络但不使用可达性的应用程序。
我应该实施哪些“必须”做的方法?
仅通知用户当前没有互联网就足够了吗?
Reachability
是一个网络助手实用程序类,它用于获取有关连接状态的各种信息
可达性的主要目的是什么?
可达性用于查询网络状态,并注册您的侦听器以在连接发生变化时获得通知。
Reachability 的主要目的是向用户显示消息吗?
不,它的主要用途是测试是否有 Internet 连接,或者在连接发生变化时得到通知
例如,如果
NSURLConnection
请求失败,我是否需要以某种方式使用可达性来重新发送请求?
是的,你可以使用它。 例如,我在我的项目中通常做的是保存对远程服务器的所有请求。
假设我要下载 10 个文件。 当任何文件由于没有 Internet 连接而导致下载过程失败时,我将它们保存到下载失败的数组中。
然后,当 Reachability 通知我 Internet 连接已恢复时,我遍历此数组并再次开始下载过程。
什么是可达性的正确使用?
这取决于您的模式和需求。
应用程序启动时只使用一个实例,然后监听网络变化是否很常见?
是的,这就是我所做的。 在我的项目中,我只有 1 个下载管理器类的实例,并且此类具有 Reachability 的唯一活动实例。
或者我应该在每次网络请求之前检查自己的可达性状态?
您可以在没有 Reachability 类的多个实例的情况下做到这一点。 我通常做的是在我的下载管理器中有一个方法,告诉我使用 Reachability 是否有连接。
使用
reachabilityWithHostName
就足够了吗,还是我还需要reachabilityForLocalWiFi
和reachabilityForInternetConnection
?
我不确定这个,但我通常做的是测试所有方法的连接性。 我不区分 3G 或 WiFi,但在某些实现中此信息(WiFi 或 3G)可能会有用。
Reachability是 Apple 制作的示例项目。 人们将其用作 SystemConfiguration 框架上的 API。 正如您已经看到的,有一些方法可以检查主机是否可达等。
我使用 Reachabilty 项目的方式是,我创建了一个带有类方法的类,如果我从中请求数据的主机可用,该方法返回一个布尔值。 如果是,则该方法返回YES
,如果不是,则返回NO
(显然)。
现在,在我使用连接的应用程序中,您需要/应该检查是否可以按照 Apple 文档所述启动连接。 我有一个简单的if
然后显示一条适当的警报消息,表明请求目前无法完成。
没有要求如果第一次无法执行请求,您应该自动重试。 这样做的主要目的是让你的应用程序远离崩溃,同时给用户一个无法完成的消息。
我自己不使用通知,但那是因为我对监视是否可以进行连接不感兴趣。 这是您必须根据您的应用程序需求来决定的事情。
您不必使用 Reachablitiy 类中的所有方法,使用其中一个就足够了。 记录了不同方法提供的内容以及何时在头文件中使用它们。
请记住包含SystemConfiguration
框架。
可达性可以最好地猜测互联网是否可达。 它告诉您是否可以通过 WiFi 访问,或者您是否只能通过移动数据访问。 不能保证它是正确的。 如果它说您有 WiFi 连接,该连接可能会在一秒钟后丢失。 确定访问 URL 是否有效的唯一方法是进行访问并查看会发生什么。 在某些情况下,访问会起作用,而可达性却说它不起作用,反之亦然。
以下是我使用 Reachibility 的目的:由于没有互联网连接而导致下载失败后,我将在 Reachability 检测到更改时开始重试(实际上是几秒钟后;在 Reachability 表示 WiFi 恢复后,URL 访问通常会立即失败)。 在不允许移动数据的情况下下载失败后,检查移动数据是否可用,然后要求用户允许使用移动数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.