2014-09-05 46 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