【问题标题】:What's the point of checking reachability before making an internet connection?在建立互联网连接之前检查可达性有什么意义?
【发布时间】:2012-08-11 01:17:33
【问题描述】:

几周前通读了 Apple 指南,它说应用应在尝试建立连接之前检查可达性状态,我读到应用商店因不这样做而被拒绝。

但是,可达性 API 最多可能需要 30 秒(根据 Apple 文档,而且我自己有时也看到过这种情况)来确定可达性是否可用。在这种情况下,API 返回不可访问。

因此,您可能会遇到以下情况:您确实具有可达性,但 API 说您没有,并且您在 30 秒左右不会发现您这样做。

必须等待 30 秒的时间太长了,尤其是在用户已启动连接的情况下。考虑这种情况:

  • 用户单击某些按钮执行某些与 Internet 相关的活动
  • 根据 Apple 指南,代码使用可达性 API 在尝试建立连接之前检查是否存在可达性。
  • Reachability API 表示不存在可达性(但实际上存在),因此代码告诉用户不存在连通性(在此过程中让他们感到困惑)
  • 30 秒后,可达性 API 通知代码现在可达性
  • 但为时已晚,因为用户已经受够了等待,因此退出了应用程序并转到了其他地方。

按照 Apple 的指南首先检查可访问性,很有可能会导致绝对糟糕的用户体验,并且应用在本可以完成时没有联系服务器。

这看起来很荒谬,我肯定错过了什么吗?

如何在提供响应式应用的同时遵循 Apple 的指导方针?

我在 Reacability API 中遇到了这些延迟并想放弃它 - 因为我见过它说没有可达性但如果你尝试有的情况,因此我希望我的应用程序尝试连接不管 API 说什么。但是如果我这样做了,那么应用程序有可能被拒绝吗?

有解决这个困境的办法吗?

【问题讨论】:

    标签: ios


    【解决方案1】:

    我不愿回答这个问题,因为它变成了一场火焰战争。 答案 - 可达性不起作用。在后台线程上花费多长时间这一事实并不重要。

    更大的问题不是它说你没有可达性,而实际上你没有。重点是什么。

    Apple 不会拒绝不使用可达性的应用程序。他们正在拒绝无法处理从 3G 到 wifi 和返回的网络切换的应用程序以及无法正确处理失去连接的应用程序。

    考虑到超时和重试(无论可达性如何)并在连接丢失时通知用户而未正确 ping 可靠后端的应用将被拒绝。

    在网络上拔掉插头时锁定的应用程序将被拒绝。

    虽然苹果力求提供帮助和清晰,但他们提供的代码并不是他们自己使用的代码,而且还不够。

    您将作为应用开发人员使其适用于上述拒绝场景。

    就是这样。所以忘记 Apple 的可达性和 simplePing。

    运行您的应用,在请求发生时终止网络。会挂吗?失败。 当请求没有发生时拉网络(但可能很快),你通知用户吗?

    这就是由于网络问题导致应用被拒绝的全部内容。

    不要抱怨没用的东西。虽然我希望这是苹果的问题, 它是我们的,我在代码上工作了太长时间,无法在 StackOverflow 上发布它。

    问问自己,我是否在 ping 一个可靠的后端?

    我是在一个线程中做的吗?

    我是否为该线程计时?

    在反应过度之前我会重试吗?

    这很容易,但话又说回来,它不是。

    【讨论】:

      【解决方案2】:

      我认为你对苹果的说法有点过分了......

      HIG 实际上试图表达的是,即使应用程序需要连接,它也应该期望没有连接。

      因此应该优雅地告知用户连接需要处于活动状态。

      我们通常做的是简单地尝试访问连接到应用程序的服务,如果失败,我们会告诉用户启用连接。

      使用可达性 API不是强制性的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-17
        • 1970-01-01
        相关资源
        最近更新 更多