我正在使用Unity开发一个Android应用.但是我无法使用它连接到Internet服务器.
这给出了错误,这很不错: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);
}
}
它可以通过统一编辑器和Windows可执行文件工作,但不能在我的Android设备(v 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类有问题吗?
Android版本:6.0.1
OxygenOS版本:3.5.6
Unity版本:5.6.0b3个人版(64位)
编辑:
我将Internet访问的PlayerSettings(据我所知是android清单)从“自动”更改为“需要”.没有成功
编辑2:
看来www.error一点都不为空.该消息刚刚被截断,因为它太长了,无法统一(我的错).错误是java.net.MalformedURLException:找不到协议:www.google.de.
因此,唯一缺少的是协议,即:http://.我从评论中尝试了建议的解决方案时发现了这个问题.
解决方法:
我对修改后的代码仍然无法正常运行进行了快速测试,并得到了以下运行时异常:
java.net.MalformedURLException: Protocol not found
遇到此类问题时,最好使用Android Monitor.
问题是您没有为URL加上http://或https://前缀. Android不支持该功能,这就是为什么它可以在Editor上运行但不能在Android上运行的原因.
当您尝试将用户名和密码嵌入url时,也会发生相同的情况.例如http://username:password@example.com.
这将适用于Windows和编辑器,但不适用于Android,但适用于fix.
这应该工作:
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("http://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应用向不属于您的服务器发出Web请求时(http://www.google.com),最好添加用户代理标头,或者期望发布应用后某些设备上的请求失败.