9

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

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

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

必须等待 30 秒的时间长得令人无法接受——尤其是在连接已由用户发起的情况下。考虑这种情况:

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

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

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

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

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

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

4

2 回答 2

6

我犹豫要不要回答这个问题,因为它变成了一场火焰战争。 答案可达性不起作用。在后台线程上花费多长时间的事实根本无关紧要。

更大的问题不是它说当你做的时候你没有可达性,它说你做的时候实际上你没有。这是重点。

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

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

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

尽管苹果试图提供帮助和清晰,但他们提供的代码并不是他们自己使用的代码,而且还不够。

您将成为应用程序开发人员,以使其适用于上述拒绝场景。

而已。所以忘记 Apple 的可达性和 simplePing。

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

由于网络问题,这就是应用程序拒绝的全部内容。

不要抱怨从未奏效的东西。虽然我希望这是 Apple 的问题,但它是我们的问题,而且我在代码上工作的时间太长,无法在 StackOverflow 上泄露它。

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

我是在线程中做的吗?

我是否为该线程计时超时?

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

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

于 2012-08-10T17:04:20.417 回答
5

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

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

所以应该优雅地告诉用户连接需要处于活动状态。

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

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

于 2012-08-10T17:04:34.433 回答