我正在使用Unity开发一款Android应用程序。但是我无法连接到互联网服务器。
尽管以下代码返回false,但这是好的:Application.internetReachability == NetworkReachability.NotReachable
但是当尝试执行以下代码片段时:
IEnumerator testConnection() {
Dictionary<string, string> header = new Dictionary<string, string>();
string userAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36";
header.Add("User-Agent", userAgent);
WWW www = new WWW("www.google.com", null, header);
yield return www;
// check for errors
if (www.error == null) {
util.debug("works");
} else {
// www.error and www.text both are empty
util.debug("testing: WWW Error: " + www.error + www.text);
}
}
它可以通过Unity编辑器和Windows可执行文件运行,但在我的Android设备上(版本6)无法运行。这个问题有已知的解决方案吗?
Ping测试似乎也可以工作:
IEnumerator PingGoogle() {
Ping googPing = new Ping("172.217.6.195");
while (!googPing.isDone) {
yield return googPing;
}
util.debug("ping works: " + googPing.time); //I reach this point with the app
}
我认为
WWW
类有问题?安卓版本:6.0.1
OxygenOS版本:3.5.6
Unity版本:5.6.0b3 Personal(64位)
编辑:我更改了PlayerSettings(据我所知,这是Android清单)的
Internet Access
,从Auto
更改为Require
。没有成功。编辑2:看起来
www.error
根本不是空的。消息被截断,因为它对Unity的文本元素来说太长了(我的错误)。错误是java.net.MalformedURLException: Protocol not found: www.google.de
。所以唯一缺少的就是协议,即:http://
。当我尝试评论中提供的解决方案时,我发现了这个问题。
GET
和POST
是两种不同类型的请求,在服务器端处理时会有所区别(在大多数情况下)。两年前,我正在编写HTTP服务器,在那里我们只是丢弃了空的POST请求。这也可能是这里的情况。另一件事是,也许从编辑器和Windows二进制文件中,WWW
类使用了不同的HTTP内部机制来发送请求,自动将空的POST
请求转换为GET
请求。 - mrogal.ski