我如何确定iOS中连接的质量?

我熟悉使用Reachability来确定在iOS设备上使用的互联网连接types(如果有的话)。 不幸的是,这不是一个体面的连接质量指标。 具有低信号强度的Wifi非常粗略,而任何低于3巴的3G都是一种灾难(更不用说只允许EDGE连接的networking)。

我怎样才能确定我的连接质量,所以我可以帮助我的用户决定他们是否应该在当前连接上下载较大的文件?

实用的方法是在应用程序开始时下载一个托pipe在可靠的全球CDN上的中等大小的文件。 你事先知道文件大小,你只需要测量所花费的时间,做一个简单的计算,然后你就可以估计连接的质量。

例如,jQuery UI源代码,unminified,gzipped重约90kB。 从http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.js下载它在我的Mac上需要327ms。 所以人们可以假设我至less有一个体面的连接,可以处理大约300kB / s(事实上,它可以处理更多)。

诀窍是在原始文件大小和networking延迟之间find一个很好的平衡点,因为在这样一个小文件中从来没有达到完整的下载速度。 另一方面,在启动应用程序后立即下载1MB将会对大部分用户造成不利影响,即使它可以更精确地测量连接的速度。

Cyrille的回答是一个很好的实用的答案,但是由于以下原因,在移动环境中并不是最好的解决scheme:

  • 它涉及到“在您的应用程序开始时”进行testing,我认为这意味着您的应用程序启动时的意思。 但是,您的应用可能会执行很长一段时间,可能会背景,然后回到前台,而用户正在随着底层networking性能的变化而改变networking环境 – 使初始testing结果可能与“当前“networking连接的性能。
  • 正因为如此,他正确地指出,这是“惩罚”你的用户,使他们下载一个testing文件,可能已经被限制的networking条件。

您还build议在您的原始文章中,您希望您的用户根据您提供的信息决定是否应该下载。 但是我build议,这不是与移动用户交互的好方法 – 你不应该要求他们做出复杂的决定。 如果绝对必要,只要问他们是否想要下载文件,如果你认为它可能会出现问题,但保持简单 – “你想下载XYZ文件(100 MB)? 我个人甚至会避免。

而不是下载testing文件,更好的解决scheme是监视和适应 。 随时测量连接的性能,跟踪连接执行情况的信息的“新鲜度”,并根据持续的性能向用户作出决定这似乎是必要的连接。

编辑:例如,如果您确定一个耐心阈值,在您的意见表示可容忍的下载性能,跟踪每个下载,用户确定是否达到该阈值。 这样,您就不再使用testing下载堵塞用户连接,而是将真实世界活动用作“连接质量”的决定性因素,最终用户体验连接质量。 如果您决定为用户提供取消下载的能力,那么您对用户的实际耐心阈值有很好的“input”,并且可以根据这种情况调整您的function,随后在开始下载之前给他们select。 如果您已经翻到这种“确认”模式,但是后来发现文件开始下载更快,您可以dynamic地退出确认模式。