我有一个Unity项目,我为Android和iOS平台构建。我想检查桌面,Android和iOS设备上的互联网连接。我已经阅读了三种不同的解决方案:
Ping某事(例如谷歌) - 我完全不喜欢这样的决定,而且我已经读过关于Android的错误。
Application.internetReachability
- 根据Unity的文档,此功能仅确定我有可能连接到互联网(它不能保证真正的连接)。< / p>
Network.TestConnection()
- 如果我没有Internet连接,我的应用程序将失败。所以这也不正确。
如何确定我是否从Unity内部连接互联网?
答案 0 :(得分:8)
我实际上并不认为Network.TestConnection()
是这项工作的正确工具。根据{{3}},它看起来像是用于测试NAT是否正常工作以及您的客户端是否可通过IP公开访问,但您要检查的是您是否具有一般的互联网连接。
以下是用户the documentation的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”这样的一个或多个网站可能是您确定连接时最好的选择。
答案 1 :(得分:4)
public static IEnumerator CheckInternetConnection(Action<bool> syncResult)
{
const string echoServer = "http://google.com";
bool result;
using (var request = UnityWebRequest.Head(echoServer))
{
request.timeout = 5;
yield return request.SendWebRequest();
result = !request.isNetworkError && !request.isHttpError && request.responseCode == 200;
}
syncResult(result);
}
答案 2 :(得分:1)
我知道这已经过时了,但也许可以帮到你。
public bool CheckInternetConnection(){
return !(Application.internetReachability == NetworkReachability.NotReachable)
}
答案 3 :(得分:1)
void Start()
{
StartCoroutine(CheckInternetConnection(isConnected =>
{
if (isConnected)
{
Debug.Log("Internet Available!");
}
else
{
Debug.Log("Internet Not Available");
}
}));
}
IEnumerator CheckInternetConnection(Action<bool> action)
{
UnityWebRequest request = new UnityWebRequest("http://google.com");
yield return request.SendWebRequest();
if (request.error != null) {
Debug.Log ("Error");
action (false);
} else{
Debug.Log ("Success");
action (true);
}
}
由于不推荐使用WWW,因此可以改用UnityWebRequest。
答案 4 :(得分:0)
我已经创建了一个Android库,可以用作Unity的插件。如果有人感兴趣,可以在https://github.com/rixment/awu-plugin
下找到不幸的是,至于iOS版本,我在这方面的知识还不够。如果有人也可以扩展回购以包括iOS版本,那就太好了。
答案 5 :(得分:-1)
您可以使用此代码检查网络连接
if(Application.internetReachability == NetworkReachability.NotReachable){
Debug.Log("Error. Check internet connection!");
}