检查Unity的互联网连接

我有一个Unity项目,我为Android和iOS平台构build。 我想检查桌面,Android和iOS设备上的互联网连接。 我读过三种不同的解决scheme:

  1. 平安(例如谷歌) – 我完全不喜欢这样的决定,我已经读了关于Android的错误。

  2. Application.internetReachability – 根据Unity的文档,这个函数只会确定我有一个连接到Internet的可能性(它不能保证真正的连接)。

  3. Network.TestConnection() – 如果我没有Internet连接,我的应用程序失败。 所以这也是不正确的。

我如何确定我是否在Unity内部连接互联网?

我不相信Network.TestConnection()是这个工作的正确工具。 根据文档 ,在我看来,它是为了testingNAT是否正常工作,客户端可以通过IP公开访问,但是您要检查的是您是否具有一般的Internet连接。

这里是我在Unity Answers发现的一个解决scheme,用户pixel_fiend ,它只是testing一个网站,看看用户是否有连接。 这个代码的一个好处是它使用IEnumerator进行asynchronous操作,所以连接testing不会占用你的应用程序的其余部分:

 IEnumerator checkInternetConnection(Action<bool> action){ WWW www = new WWW("http://google.com"); yield return www; if (www.error != null) { action (false); } else { action (true); } } void Start(){ StartCoroutine(checkInternetConnection((isConnected)=>{ // handle connection status here })); } 

您可以将网站更改为任何您想要的内容,甚至可以修改代码以在多个网站中的任何一个可访问时返回成功。 AFAIK是没有办法检查真正的互联网连接,而不试图连接到互联网上的特定网站,所以“ping”一个或多个这样的网站可能是您确定连接的最佳select。

testing“有保障的”互联网连接的正确方法是使用http请求到具有已知内容的地方进行强制门户检测。 这就是操作系统自己testing是否应该提供一个WiFilogin屏幕给用户。

简单的ping或检查www请求的错误/成功状态是不够的,例如酒店/机场wifilogin页面可以返回没有错误代码(而不是你想要的页面)。

此外,例如,在iOS上,还有新的限制(只有在明确列入白名单时才允许http的应用程序传输安全性)。

我的资产是一个简单的解决scheme,虽然不是免费的:资源商店中的Internet Reachability Verifier 。

你可以试试这个:

  if(Application.internetReachability == NetworkReachability.NotReachable) { // There is no internet connection Debug.Log("Error. Check internet connection!"); } else {// there is internet connection , do stuff here}