【发布时间】:2019-01-28 04:01:31
【问题描述】:
构建与 PHP/MySQL 后端通信的 Unity 前端应用程序。现在我正在处理它的注册和登录部分。在 Unity 编辑器中,一切正常,在浏览器前端注册也正常。但是,一旦我在 Unity 中构建并构建它以在我的 Google Pixel 手机上进行测试,注册和登录都在我的手机上失败。我在登录时收到的错误消息是“解析服务器响应时出错,请重试!”在我的 UILogin.cs 中。然而,没有其他任何东西。我尝试按照 Unity 文档进行调试、adb 和 DDMS 以了解正在发生的事情,但我在所有这些冒险中都失败了。 Android 和 WWW 对象或 Web 通信有什么特别不同的地方吗?这是我的 UILogin.cs 的一部分,还将包括 Login.php。
UILogin.cs
IEnumerator AttemptLogin(bool quickLogin)
{
CreateLoadingScreen();
DeactivateForm();
WWWForm form = new WWWForm();
form.AddField("email", Email.text);
form.AddField("password", Password.text);
WWW www = new WWW(URL.GetLoginURL, form);
yield return www;
DestroyLoadingScreen();
ActivateForm();
ParseResult(www.text, quickLogin);
}
void ParseResult(string result, bool quickLogin)
{
byte resultCode;
if (!byte.TryParse(result, out resultCode))
Result.text = "Error parsing response from server, please try again!";
else if (resultCode == 0)
{
if (RememberToggle.isOn && !quickLogin) // Remember me
{
PlayerPrefs.SetInt("remember", 1);
PlayerPrefs.SetString("email", Email.text);
PlayerPrefs.SetString("password", Password.text);
}
else if (!quickLogin)
{
TemporaryAccount.Email = Email.text;
TemporaryAccount.Password = Password.text;
}
SceneManager.LoadScene(3);
}
else // Failure
{
if (quickLogin)
ShowForm();
Result.text = WebError.GetLoginError(resultCode);
}
}
Login.php
<?php
require "conn.php";
$stmt = $pdo->prepare("SELECT * FROM account WHERE email=:email");
$stmt->bindParam(":email", $_POST['email']);
$stmt->execute();
$count = $stmt->rowCount(); // gets count of records found
if($count > 0) {
$result = $stmt->fetch(); // gets resultset
if(!password_verify($_POST['password'], $result[4]))
echo "2";
else
echo "0";
}
else {
echo "1";
}
?>
有什么想法吗?
更新 #1 我在 yield return www 之后打印了 www.text 和 www.error;文本为空,错误提示:未知错误。
更新 #2 有趣的是,我也从中得到了未知错误:
Clickme.cs
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
public class Clickme : MonoBehaviour
{
public Text Result;
public void OnClick()
{
StartCoroutine(RunScript());
}
IEnumerator RunScript()
{
WWW www = new WWW("http://www.familypolaris.com/helloWorld.php");
yield return www;
if (www.text == "")
Result.text = "Result was empty, error: " + www.error;
}
}
HelloWorld.php
<?php
echo "Hello World!";
?>
【问题讨论】:
-
您应该做的第一件事是打印收到的数据
www.text,看看它是否真的收到了预期的数据。我怀疑它在Android上确实如此。第二件事是打印错误www.error。如果您的请求中有错误,您必须在处理或使用收到的数据之前check。用结果更新你的问题。 -
好的,我做到了并更新了我的问题。在 yield 之后打印 www.text 和 www.error 的结果是:www.text 是空的。 www.error 说:“未知错误”
-
那是你的问题。 WWW 请求失败。在Android上登录
URL.GetLoginURL的值是多少? -
这里有一些有趣的事情。所以我通过超级简化来测试它。我也收到此代码的未知错误:我将用它更新我的问题,请稍等。好的,添加了更新 #2。我认为我们不能比这更简化代码了!哈哈哈。然而,即使在这个简单的代码中,“未知错误”仍然存在。
-
另外URL是我创建的一个类,不是官方的类。 URL.GetLoginURL 是一个访问器,它返回这个字符串:familypolaris.com/login.php(stackOverflow 杀死了 h t t p : // w w w 的一部分,但它就在那里。)
标签: c# php android mysql unity3d