我的cordova应用程序需要互联网连接才能执行某些操作。 我正在使用https://github.com/apache/cordova-plugin-network-information在应用上线或离线时获取活动。 它适用于移动数据,但对于Wifi,它有点奇怪。 无论我的wifi是否连接到互联网,都会报告我在两种情况下都在线。
我期待的行为是说我只有当wifi连接到互联网时才在线。 我正在运行离子框架,angularjs,cordova 3.5.1,并使用Android,Galaxy S3进行测试。
答案 0 :(得分:6)
插件不会检测用户是否可以访问Internet,但仅限用户在网络上。由于您的手机在WiFi网络上,即使WiFi网络无法访问互联网,该插件仍按设计执行。
为了测试连接性,您必须始终尝试请求 - 这是真正了解设备是否具有Internet访问权限的唯一方法。因此,如果您尝试访问www.google.com
,则必须尝试请求并处理导致的任何错误。拥有网络插件的唯一好处是,您可以获得更多关于是否值得尝试请求的信息 - 如果设备未连接到任何网络,您知道几乎没有有利于尝试请求。
如果没有路线,您的请求几乎会立即失败。如果还有其他问题,您的请求可能会超时。在长时间请求的情况下,请务必向用户说明一些进展,因为超时可能需要几秒钟(或几分钟)才会发生。
如果您的应用需要定位特定主机,那么这些主机将与您用于验证连接的主机相同。如果您的应用面向通用主机(或用户输入的主机),请使用特定主机进行测试以测试连接。
www.example.com
,请不要ping www.google.com
。您的尝试可能被视为恶意攻击,特别是如果您的应用程序变得流行。另一个提示:
请检查网络类型以确定是否需要限制数据(在蜂窝网络的情况下) 但不要认为网络类型可以用来指示数据传输速度 - 仅仅因为你在4G网络上并不意味着你将保证快速的数据传输。当然,这同样适用于WiFi。