Unity – WWW.text在Android设备上返回null

我正在使用Unity开发Android应用程序。 但我无法用它连接到互联网服务器。 这会给出错误,这很好: Application.internetReachability == NetworkReachability.NotReachable

但是在尝试执行此代码段时:

 IEnumerator testConnection() { Dictionary header = new Dictionary(); 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位)

编辑:我改变了从AutoRequireInternet Access的PlayerSettings(据我所知,这是Android清单)。 没有成功

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

我运行了一个快速测试,修改后的代码仍然无效,并且遇到了这个运行时exception:

java.net.MalformedURLException:找不到协议

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

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

当您尝试在url中嵌入用户名和密码时,也会发生同样的事情。 例如, http:// username:password@example.com

这将适用于Windows和编辑器,但不适用于Android,但有一个修复程序 。

这应该工作:

 IEnumerator testConnection() { Dictionary header = new Dictionary(); 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请求时,最好添加用户代理程序标头或期望某些设备上的请求失败当你的应用程序发布时。