我有一个Unity项目,我为
Android和iOS平台构建.我想检查桌面,Android和iOS设备上的互联网连接.我读过三个不同的解决方案:
> Ping一些东西(例如Google) – 我完全不喜欢这样的决定,而且我已经读过关于Android的错误.
> Application.internetReachability – 根据Unity的文档,此功能仅确定我有可能连接到Internet(它不保证真正的连接).
> Network.TestConnection() – 如果我没有Internet连接,我的应用程序将失败.所以这也不正确.
如何确定我是否在Unity内部具有互联网连接?
解决方法
我实际上并不认为Network.TestConnection()是这项工作的正确工具.根据
the documentation,它看起来像是用于测试NAT是否正常工作以及您的客户端是否可通过IP公开访问,但您要检查的是您是否具有一般的互联网连接.
这是用户pixel_fiend的solution that I found on Unity Answers,其仅测试网站以查看用户是否具有连接性.此代码的一个好处是它使用IEnumerator进行异步操作,因此连接测试不会占用应用程序的其余部分:
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”这样的一个或多个网站可能是您确定连接时的最佳选择.