我有一个Unity项目,我为Android和iOS平台构建。我想检查桌面、Android和iOS设备上的互联网连接。我已经阅读了三种不同的解决方案:
- Ping一些东西(例如谷歌)-我完全不喜欢这样的决定,我读过关于Android的错误。
Application.internetReachability
-根据Unity的文档,此函数将仅确定我有连接到Internet的可能性(它不保证真实的的连接)。Network.TestConnection()
-如果我没有Internet连接,我的应用程序将失败。因此这也是不正确的。
如何确定我是否在Unity中具有互联网连接?
8条答案
按热度按时间yuvru6vn1#
实际上我并不认为
Network.TestConnection()
是适合这项工作的工具。根据the documentation,在我看来,它似乎是用来测试NAT是否正常工作,以及客户端是否可以通过IP公开访问,但您需要检查的是您是否具有一般的Internet连接。下面是用户pixel_fiend的一个solution that I found on Unity Answers代码,它只是测试一个网站,看看用户是否有连接。这个代码的一个好处是它使用
IEnumerator
进行异步操作,所以连接测试不会耽误应用程序的其余部分:您可以将网站更改为任何您想要的网站,甚至修改代码,以返回成功,如果任何一个网站是可达的。AFAIK没有办法检查真正的互联网连接,而不尝试连接到互联网上的一个特定的网站,所以“ping”一个或多个这样的网站可能是您最好的赌注,在确定连接。
a1o7rhls2#
q9yhzks03#
由于WWW已被弃用,因此可以改用UnityWebRequest。
ct2axkht4#
我知道这是旧的,但也许可以帮助你。
vsdwdz235#
我已经创建了一个Android的库,可以用作Unity的插件。
至于iOS版本,不幸的是我在这方面的知识不够。如果有人能扩展回购包括iOS版本太好了。
nmpmafwu6#
在Unity的最新版本中,WWW已经过时,因此您需要使用WebRequest。
下面是我用来检查用户是否在线的代码:
如果你想知道用户是否在线,你可以从代码中的HtmlLookUpResult_isSuccess得到结果。但是,实际上,你最有可能想确认用户是否也可以访问你的服务器或你在项目中使用的任何远程系统,对吗?这就是剩下的代码所做的。
如果你想知道什么是UniversalEnum,在我的代码中,它是一个独立的非Monobhavior脚本,包含了我计划在项目中重用的所有持久变量(比如字符串和哈希)。
通用枚举。字符串_空=“";
网站http://www.ENTER:
正如你所看到的,isOnline.html文件是我托管的网站的HTML_content中的“games-latestnews”文件夹中的一个文件,它只包含**[1]**作为它的内容。没有实际的内容,很像一个.txt文件设置在线。我使用这种方法也是因为我可以添加新的新闻到我的游戏,只是添加新的HTML页面在该文件夹。我'我还使用Try{}来包围内容检查,这样如果ANYTHING失败,它将返回Catch{}值,然后通过比较内容(字符串)是空字符串还是包含任何内容,我们可以知道用户是否在线以及他/她是否可以访问您的网站。
一个很好的例子,为什么你会想检查用户是否有访问网络和您的网站是如果用户使用一个有限的网络,如你可能会发现在一所学校。如果一所学校决定禁止您的网站由于任何原因,只是查找如果连接是可能的,将返回一个假阳性,因为它不会访问实际的网页反正。
tyu7yeag7#
Ping 8.8.8.8而不是发送GET Unity已经提供了这样的工具:
Ping
Ping操作是异步的,可以使用Ping. isDone轮询Ping对象的状态。收到响应时,它位于Ping. time中。
Windows应用商店应用:流套接字用于模拟ping功能,它将尝试使用端口80打开与指定IP地址的连接。要使此功能正常工作,必须在Package. appxmanifest中启用InternetClient功能。
Android:如果ICMP套接字可用,则将其用于ping操作,否则Unity将生成一个子进程/system/bin/ping用于ping操作。要检查ICMP套接字是否可用,您需要读取/proc/sys/net/ipv4/ping_group_range的内容。如果ICMP套接字可用,则此文件应包含0 2147483647的条目。
6mw9ycah8#
您可以使用此代码检查网络连接