繁体   English   中英

如何使用 iOS 可达性

[英]How to use iOS Reachability

我正在开发一个使用网络的 iPhone 应用程序。 iPhone 通过 HTTP 请求与我的服务器通信,应该可以在 WiFi 和 3G 上工作。
我目前使用NSURLConnection initWithRequest向我的服务器发送异步请求并获得响应(但我很快就会转向使用ASIHTTPRequest库)

我知道对于这种应用程序(需要互联网连接的应用程序)我应该(必须?)使用可达性。

在网上搜索并查看 Apple 的 Reachability 示例代码后,我仍然不明白一些基本的东西:

可达性的主要目的是什么?

在苹果的例子中,他们检测主机、WiFi 和 3G 的网络问题,并向用户显示适当的消息。
Reachability 的主要目的是向用户显示消息吗? 或者我需要将它用于其他更实际的场景吗? 例如,如果NSURLConnaction请求失败,我是否需要以某种方式使用可达性来重新发送请求?

什么是可达性的正确使用?

应用程序启动时只使用一个实例,然后监听网络变化是否很常见? 或者我应该在每次网络请求之前检查自己的可达性状态?
使用reachabilityWithHostName就足够了吗,还是我还需要reachabilityForLocalWiFireachabilityForInternetConnection

还有一件事,我知道苹果可以拒绝使用网络但不使用可达性的应用程序。
我应该实施哪些“必须”做的方法?
仅通知用户当前没有互联网就足够了吗?

Reachability是一个网络助手实用程序类,它用于获取有关连接状态的各种信息

可达性的主要目的是什么?

可达性用于查询网络状态,并注册您的侦听器以在连接发生变化时获得通知。

Reachability 的主要目的是向用户显示消息吗?

不,它的主要用途是测试是否有 Internet 连接,或者在连接发生变化时得到通知

例如,如果NSURLConnection请求失败,我是否需要以某种方式使用可达性来重新发送请求?

是的,你可以使用它。 例如,我在我的项目中通常做的是保存对远程服务器的所有请求。

假设我要下载 10 个文件。 当任何文件由于没有 Internet 连接而导致下载过程失败时,我将它们保存到下载失败的数组中。

然后,当 Reachability 通知我 Internet 连接已恢复时,我遍历此数组并再次开始下载过程。

什么是可达性的正确使用?

这取决于您的模式和需求。

应用程序启动时只使用一个实例,然后监听网络变化是否很常见?

是的,这就是我所做的。 在我的项目中,我只有 1 个下载管理器类的实例,并且此类具有 Reachability 的唯一活动实例。

或者我应该在每次网络请求之前检查自己的可达性状态?

您可以在没有 Reachability 类的多个实例的情况下做到这一点。 我通常做的是在我的下载管理器中有一个方法,告诉我使用 Reachability 是否有连接。

使用reachabilityWithHostName就足够了吗,还是我还需要reachabilityForLocalWiFireachabilityForInternetConnection

我不确定这个,但我通常做的是测试所有方法的连接性。 我不区分 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM