检查Unity的互联网连接
我有一个Unity项目,我为Android和iOS平台构build。 我想检查桌面,Android和iOS设备上的互联网连接。 我读过三种不同的解决scheme:
-
平安(例如谷歌) – 我完全不喜欢这样的决定,我已经读了关于Android的错误。
-
Application.internetReachability
– 根据Unity的文档,这个函数只会确定我有一个连接到Internet的可能性(它不能保证真正的连接)。 -
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}