应用程式可在Unity编辑器中运作,但无法在Android上运作

时间:2018-08-21 22:33:57

标签: c# php android mysql unity3d

构建一个与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 我在收益率返回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!";
?>

1 个答案:

答案 0 :(得分:0)

我知道了,所以我将答案发布在这里。在有人评论说他们尝试了我的代码并且一切正常之后,我决定在这里尝试其他设备。该设备也无法注册和登录。这告诉我我的构建设置有问题。我的第一个想法是将构建类型从Gradle切换为Internal,这立即解决了我两个设备的问题。