几个星期前,通过Apple指南,它说应用程序应该在尝试建立连接之前检查可访问性状态,并且我已经读过应用程序商店拒绝的应用程序没有这样做。
然而,可访问性API最多可能需要30秒(根据Apple文档,我有时也会看到这种情况),以确定是否可以访问。在这种情况下,API返回不可达。
因此,你可能会遇到实际上具有可达性的情况,但是API说你没有,而且你不会发现你做了30秒左右。
等待30秒是不可接受的 - 特别是如果连接已由用户启动。请考虑以下情况:
通过遵循Apple的指导方针来首先检查可达性,很可能会产生绝对糟糕的用户体验,并且该应用程序在完成后无法与服务器联系。
这看起来很荒谬,我肯定错过了什么?
如何在提供响应式应用的同时遵循Apple的指导原则?
我在Reacability API中经历过这些延迟,并且想要放弃它 - 因为我已经看到它说没有可达性的情况但是如果你尝试那样,那么我希望我的应用程序无论如何都要尝试连接不管API说什么。但是,如果我这样做,那么应用程序有可能被拒绝吗?
这种困境是否有解决方案?
答案 0 :(得分:6)
我对这个问题犹豫不决,因为它变成了一场火焰战。 答案 - 可达性不起作用。在背景线程上花费很长时间的事实根本无关紧要。
它的更大问题并不在于它表示你在做的时候没有可达性,而是它说你做的事实上你不这样做。这是重点。
Apple并未拒绝不使用可访问性的应用。他们拒绝那些无法处理从3G到WiFi和网络切换的应用程序以及无法正确处理丢失连接的应用程序。
如果应用程序没有正确ping可靠后端而考虑到超时和重试,无论可达性如何,并在连接丢失时通知用户将被拒绝。
在网络上拔出插头时锁定的应用将被拒绝。
虽然苹果试图提供帮助和清晰,但他们提供的代码并不是他们自己使用的代码,而且还不够。
您将成为应用开发人员,以使其适用于上述拒绝方案。
多数民众赞成。所以忘记了Apple的可达性和simplePing。
运行您的应用,在请求发生时终止网络。它挂了吗?失败。 当请求没有发生时拉网络(但可能很快就会发生),你会通知用户吗?
由于网络问题导致整个应用拒绝。
不要抱怨从未奏过的东西。虽然我想这是苹果问题, 它是我们的,我在代码上工作的时间太长,无法在StackOverflow上发布它。
问问自己,我是否在为可靠的后端打电话?
我是在线程中做的吗?
我是否计划超时的线程?
我是否在反复过度之前重试?
很容易,但话又说回来。
答案 1 :(得分:5)
我认为你的苹果有点过分了......
HIG实际上试图表达的是,即使需要连接,应用程序也应该没有连接。
因此,应优雅地告知用户连接需要处于活动状态。
我们通常只是尝试访问与应用程序相关的服务,如果失败,我们会告诉用户启用连接。
使用可访问性 API 不是必需的。