【问题标题】:Updating iPhone Reachability on Network Changes根据网络变化更新 iPhone 可达性
【发布时间】:2011-08-29 02:27:46
【问题描述】:

编辑 23.5.11

我现在想知道我是否过度设计了这个。当我使用在线连接时,我会正确处理它 - 要么:

  • 在后台显示进度或活动指示器,如果失败,我会显示合适的消息或

  • 我调用另一个应用程序,要么是 Safari 要么是 Maps,然后它们会自行检查并在没有连接时失败。这使得用户在另一个失败的应用程序中,这并不完美。

因此,如果我按照下面的建议进行操作,并且标准的 Reachability 返回无法访问,那么我必须执行 NSURLConnection 以防收音机进入睡眠状态,那么我不确定这是否比尝试获取更好首先是在线资源。

如果有人能提供帮助,我将不胜感激。我几乎准备好提交了,只需要把它做好。

我使用 Apple 的 Reachability 示例通常效果很好,除非移动或蜂窝连接进入睡眠状态然后恢复,或者 wifi 进入并依赖蜂窝连接。

当移动(蜂窝)连接没有改变时,这很好。这与我读过的 cmets 一致,即当蜂窝无线电关闭时,您必须再次手动将其唤醒。但是,我不知道该怎么做。

我需要设置一个 NSURLConnection 吗?一些示例代码会很棒。当我收到没有连接的通知时,我会发送 NSURLConnection 并告诉用户稍后再试一次,然后如果我收到回调说它成功,覆盖 Reachability 的关闭设置吗?

此外,每当似乎没有联系时,我是否需要这样做,以防万一 - 这似乎很浪费资源,而事实并非如此。例如,不在 wifi 范围内的 iPod Touch。

我也查看了DDG 的替代方案,但看起来会有同样的问题。

任何有用的建议都将受到热烈欢迎。

谢谢,

克里斯。

【问题讨论】:

    标签: iphone app-store nsurlconnection reachability


    【解决方案1】:

    您不能也不应该使用 Apple 的 Reachabilty 示例代码(或 SCNetworkReachabilityFlags)来确定网络资源是否可用或将要可用。它们为您提供有用的工具,用于向用户提供有关连接失败原因的反馈以及确定是否以及何时重试连接。但是,如果您想访问网络资源,您应该请求它。

    不要根据可达性标志向您的用户显示“无网络连接”警报。执行您的网络请求,如果它失败,请检查可达性标志和您自己的请求历史,看看您是否应该告诉您的用户请求失败或静默重试。您不应该或不需要在每次网络故障时向用户发送垃圾邮件。如果请求失败,请考虑在主机似乎可访问并且仅在几次尝试后或当可访问性标志表明您实际上已丢失网络连接而不仅仅是单个请求失败时向用户报告失败时重试它。

    至于重新激活设备的无线电,您需要在尝试获取网络资源的愿望与允许设备关闭网络接口以节省电力之间取得平衡。我不知道您的应用程序正在尝试做什么,但我建议让设备关闭电源,然后尝试连接以响应用户要求应用程序获取新数据。我没有看到您想要重新激活无线电只是为了向用户提示某些网络资源当前可能或可能无法访问的情况。

    https://devforums.apple.com/message/409618

    知道主机是否可用的唯一方法是尝试连接它。如果该连接失败,您可以使用可达性向用户提供反馈,并指导您的重试机制,但使用可达性来预检连接并不是一个好主意。

    这里的关键问题是可达性使用本地信息来确定其结果。这并没有说明更广泛的互联网的状态。源服务器可能已关闭,或者您与源服务器之间的任意数量的链接可能已关闭,可达性会很高兴地说它是可达的。那时您将尝试连接,但连接将失败。因此,无论如何您都必须处理错误,这意味着您最好不要进行预检,而让您的标准错误处理也涵盖这种情况。

    还可以看看这个关于在使用外部应用程序加载资源之前检查资源的问题:https://devforums.apple.com/message/411329

    对资源发出 HEAD 请求应该可以让您合理地了解外部应用是否能够在不需要您下载大量数据的情况下加载它(尽管延迟仍然是一个问题)。

    【讨论】:

    • 哇乔纳 - 很好,清晰和详细的回应。你在什么地方教书吗?
    • 但是,当“可达性状态”发生变化时,您可以使用可达性代码得到通知。
    • 感谢@Jonah - 这是一个伟大而明确的回应。我认为您的澄清将对很多人有所帮助,我们甚至在您回答之前的投票中就可以看出这一点。我现在要显着简化我的流程。再次感谢。
    • @Alexsander - 是的,你可以,但我不确定这些信息的可靠性。
    • @Alexsander, @Chris:可达性标志让您了解设备对可用网络的了解。这是识别设备网络连接发生变化的好方法,这样您就可以“我似乎仍然有 WWAN 连接,我应该尝试再次访问该主机”或“我似乎已经失去了所有连接,我不应该”现在不用费心再试一次”。但是,仅允许您做出诸如“您现在可以下载新数据”之类的声明是不够的。您真正知道主机是否可访问的唯一方法是尝试访问它。
    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多