Создание интерфейсного интерфейса Unity, которое взаимодействует с внутренним интерфейсом PHP/MySQL. Сейчас я работаю над регистрацией и участками входа в систему. В редакторе Unity все работает отлично, в интерфейсе браузера также отлично работает регистрация. Но как только я беру рабочую сборку в Unity и создаю ее для тестирования на моем телефоне Google Pixel, регистрация и логин меня не срабатывают на моем телефоне. Сообщение об ошибке, которое я получаю от входа в систему, - "Ошибка ответа на синтаксический анализ с сервера, повторите попытку!" который находится в моем UILogin.cs. Но больше ничего не прилагается. Я пробовал следовать документации Unity для отладки, adb и DDMS, чтобы получить доступ, чтобы узнать, что происходит, но я потерпел неудачу на всех этих предприятиях. Есть ли что-то особенное в отношении объектов Android и WWW или веб-сообщений? Вот часть моего 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 Я напечатал www.text и www.error после возврата доходности www; Текст имеет значение null, а ошибка говорит: Неизвестная ошибка.
Обновление # 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!";
?>
Я понял это, поэтому я отправлю ответ здесь. После того, как кто-то заметил, что они пробовали мой код, и все работает отлично, я решил попробовать другое устройство здесь. Это устройство также не удалось зарегистрировать и войти в систему. Это сказало мне что-то не так с моими настройками сборки. Моя первая идея заключалась в том, чтобы переключить тип сборки с Gradle на Internal, и это немедленно решило проблему для обоих моих устройств.
www.text
и посмотреть, действительно ли он получил ожидаемые данные. Я сомневаюсь, что это было на Android. Второе, что нужно сделать, это распечатать ошибкуwww.error
. Вы должны проверить , есть ли ошибка в вашем запросе перед обработкой или использованием полученных данных. Обновите свою оценку с результатом.