【问题标题】:Cordova plugin to detect internet connection用于检测互联网连接的 Cordova 插件
【发布时间】:2014-09-05 12:11:56
【问题描述】:

我的 cordova 应用程序需要互联网连接才能执行某些操作。 我使用https://github.com/apache/cordova-plugin-network-information 在应用程序上线或下线时获取事件。 它适用于移动数据,但对于 Wifi,它的行为有点奇怪。 无论我的 wifi 是否连接到互联网,它都会报告我在这两种情况下都在线。

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

【问题讨论】:

  • 我认为插件可以检测您是否连接到 wifi 网络。您的 wifi 网络是否连接到 Internet 并没有什么区别。插件必须将一个包发送到服务器,并获得检测您是在线还是离线的答案。例如,也许您可​​以通过 ping google 使用 javascript 自己构建这样的功能,但是......我不知道,这与适用法律有什么关系
  • 我想我在这里得到了方向。我需要互联网连接才能访问我自己的 api,所以我可以 ping 我自己的 api 来检查互联网连接。

标签: android angularjs cordova


【解决方案1】:

插件不会检测用户是否可以访问互联网,但只会检测用户是否在网络上。由于您的手机在 WiFi 网络上,即使 WiFi 网络无法访问互联网,该插件仍按设计运行。

为了测试连接性,您必须始终尝试请求 - 这是真正了解设备是否可以访问 Internet 的唯一方法。因此,如果您尝试联系www.google.com,您必须尝试请求并处理由此产生的任何错误。使用网络插件的唯一好处是,您可以获得更多关于是否值得一开始尝试请求的信息——如果设备未连接到任何网络,您知道几乎没有受益于尝试请求。

如果没有路由,您的请求几乎会立即失败。如果还有其他问题,您的请求可能会超时。如果请求较长,请务必向用户指示一些进度,因为超时可能需要几秒钟(或几分钟)的时间。

如果您的应用需要以特定主机为目标,这些主机将与您用于验证连接性的主机相同。如果您的应用程序以通用主机(或用户输入的主机)为目标,请使用特定主机进行测试以测试连接性。

  • 不要以为设备可以访问一个主机就意味着它可以访问另一个主机 - 某些网络可能会阻止某些主机,同时允许访问其他主机。
  • 不要使用不属于实际请求的主机进行测试,尤其是在您无法控制的主机上。也就是说,如果你想测试用户是否可以到达www.example.com,不要pingwww.google.com。您的尝试可能会被视为恶意攻击,尤其是当您的应用变得流行时。

另一个提示:

请检查网络类型以查看是否需要限制数据(在蜂窝网络的情况下) 但不要假设网络类型可用于指示数据传输速度——仅仅因为您在 4G 网络上并不意味着您可以保证快速数据传输。当然,这同样适用于 WiFi。

【讨论】:

  • 感谢 Kerri,这很全面!我将按照您建议的方式实施它。我认为可能有一种方法可以让另一个插件检测互联网连接,而不是网络连接。
猜你喜欢
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多