2014-09-05 49 views
2

我的科尔多瓦应用程序需要互联网连接的一些行动。 我使用https://github.com/apache/cordova-plugin-network-information获得一个事件,每当应用程序联机或脱机。 它适用于Mobile Data,但对于Wifi来说,它有点奇怪。 无论我的wifi是否连接到互联网,它都会报告我在两种情况下都在线。科尔多瓦插件来检测互联网连接

我期待的行为就是说,只有当wifi连接到互联网时,我才在线。 我运行离子框架,angularjs,cordova 3.5.1,并使用Android,Galaxy S3进行测试。

+1

我认为插件可以检测您是否连接到无线网络。如果你的wifi网络连接到互联网或没有,它没有什么区别。插件必须将一个包发送到服务器,并获得一个用于检测您是否在线或离线的答案。也许你可以自己用javascript创建这样的功能,例如ping通谷歌,但是...我不知道,这与什么关系适用法律 – Sithys 2014-09-05 14:05:42

+0

我想我在这里得到方向。我需要互联网连接来访问我自己的API,所以我可以ping我自己的API来检查互联网连接。 – 2014-09-06 08:34:36

回答

6

插件不检测用户是否有权访问Internet,但仅当用户在网络上时才有效。由于即使WiFi网络无法访问互联网,您的手机仍在WiFi网络上,因此该插件按设计运行。

为了测试连接性,您必须始终尝试请求 - 这是真正知道设备是否可以访问Internet的唯一方法。因此,如果您尝试访问www.google.com,则必须尝试请求并处理导致的任何错误。让网络插件就位的唯一好处是,您可以获得更多关于是否值得尝试请求的更多信息 - 如果设备未连接到任何网络,您知道有一点在尝试请求中受益。

如果没有路线,您的请求应该几乎立即失败。如果还有其他问题,您的请求可能会超时。由于超时可能需要几秒钟(或几分钟)才能发生,所以请确保在长时间请求中向用户指示一些进度。

如果您的应用需要定位特定主机,那么这些主机就是您用来验证连接的主机。如果您的应用程序定位通用主机(或用户输入的主机),请测试特定主机以测试连接。

  • 不要认为,因为设备可以连接到一台主机,这意味着它可以到达另一台主机 - 有些网络可能会阻止某些主机,同时允许访问其他主机。
  • 不要使用不是实际请求一部分的主机进行测试,特别是如果它是您不能控制的主机。也就是说,如果你想测试用户是否可以达到www.example.com,请不要ping www.google.com。您的尝试可能会被视为恶意攻击,尤其是如果您的应用程序变得流行。

另外一个提示:

做检查的网络类型,看看是否需要限制的数据(在蜂窝网络的情况下) 但不要以为网络类型可以用来表明数据传输速度 - 仅仅因为你在4G网络上并不意味着你将得到快速的数据传输保证。当然,这同样适用于WiFi。

+0

谢谢Kerri,这是全面的!我会按照您建议的方式实施它。我认为可能有另一种插件检测互联网连接的方式,而不是网络连接。 – 2014-09-06 08:31:47