在建立互联网连接之前检查可达性的重点是什么?

时间:2012-08-10 16:48:22

标签: ios

几个星期前,通过Apple指南,它说应用程序应该在尝试建立连接之前检查可访问性状态,并且我已经读过应用程序商店拒绝的应用程序没有这样做。

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

因此,你可能会遇到实际上具有可达性的情况,但是API说你没有,而且你不会发现你做了30秒左右。

等待30秒是不可接受的 - 特别是如果连接已由用户启动。请考虑以下情况:

  • 用户点击执行某些互联网相关活动的某个按钮
  • 根据Apple准则,代码使用可访问性API在尝试建立连接之前检查是否存在可访问性。
  • Reachability API说没有可达性(但实际上有),所以代码告诉用户没有连接(在过程中混淆它们)
  • 30秒后,Reachability API会通知现在的代码是否具有可达性
  • 但是为时已晚,因为用户退出应用程序而已经去了其他地方,因为他们厌倦了等待。

通过遵循Apple的指导方针来首先检查可达性,很可能会产生绝对糟糕的用户体验,并且该应用程序在完成后无法与服务器联系。

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

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

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

这种困境是否有解决方案?

2 个答案:

答案 0 :(得分:6)

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

它的更大问题并不在于它表示你在做的时候没有可达性,而是它说你做的事实上你不这样做。这是重点。

Apple并未拒绝不使用可访问性的应用。他们拒绝那些无法处理从3G到WiFi和网络切换的应用程序以及无法正确处理丢失连接的应用程序。

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

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

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

您将成为应用开发人员,以使其适用于上述拒绝方案。

多数民众赞成。所以忘记了Apple的可达性和simplePing。

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

由于网络问题导致整个应用拒绝。

不要抱怨从未奏过的东西。虽然我想这是苹果问题, 它是我们的,我在代码上工作的时间太长,无法在StackOverflow上发布它。

问问自己,我是否在为可靠的后端打电话?

我是在线程中做的吗?

我是否计划超时的线程?

我是否在反复过度之前重试?

很容易,但话又说回来。

答案 1 :(得分:5)

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

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

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

我们通常只是尝试访问与应用程序相关的服务,如果失败,我们会告诉用户启用连接。

使用可访问性 API 不是必需的