Unity - WWW.text在Android设备

时间:2017-03-13 11:37:31

标签: c# android unity3d request httprequest

我正在使用Unity开发Android应用。但我无法用它连接到互联网服务器。 这会给出错误,这很好: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 Access的{​​{1}}更改为AutoRequire的PlayerSettings(这是我所知道的Android清单)。没有成功

EDIT2: 似乎www.error根本不是空的。消息刚被截断,因为它对于unitys-textelement来说太长了(我的错)。错误是java.net.MalformedURLException: Protocol not found: www.google.de。 所以唯一缺少的是协议1,即:http://。当我从评论中尝试建议的解决方案时,我发现了这个问题。

1 个答案:

答案 0 :(得分:3)

我使用仍然无效的修改代码进行了快速测试,并获得了此运行时异常:

  

java.net.MalformedURLException:未找到协议

当遇到类似这样的问题时,使用Android Monitor总是好的。

问题是您没有在网址前加http://https://作为前缀。 Android不支持这一点,这就是为什么它在编辑器上工作但在Android上没有。

当您尝试在网址中嵌入用户名和密码时,也会发生同样的事情。例如, 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应用程序向不属于您的服务器(http://www.google.com)发出Web请求时,最好添加 user-agent 标头或期望请求在您的应用发布时在某些设备上失败。