неизвестная ошибка с функцией unitywebrequest - PullRequest
0 голосов
/ 13 июня 2019

Я делаю apk, который при запуске на моем мобильном телефоне выдает следующую ошибку

"Неизвестная ошибка"

но самое странное, что если он работает нормально, когда я запускаю его с Unity, я использовал следующий код, чтобы показать мне, какая была ошибка, когда я выполнял его на своем мобильном телефоне, потому что в Unity работает отлично

IEnumerator logIn(WWWForm form)
{
    using (UnityWebRequest webRequest = UnityWebRequest.Post("http://localhost:3000/login", form))
    {
        yield return webRequest.SendWebRequest();

        if (webRequest.isNetworkError )
        {
            Debug.Log(webRequest.error);
            advertencia.SetActive(true);
            advertencia.GetComponent<Text>().text=webRequest.error+"1";
        }
        else if (webRequest.isHttpError)
        {
            advertencia.SetActive(true);
            advertencia.SetActive(true);
            advertencia.GetComponent<Text>().text = webRequest.error+"2";
        }
        else
        {                
            SceneManager.LoadScene("Principal");
        }
    }
}

проверьте, был ли мой apk подключен к Интернету с помощью следующего кода, который показывает текст, если он подключается к Интернету

private void Update()
{
    if (Application.internetReachability == NetworkReachability.NotReachable)
    {
        advertencia.SetActive(true);
        Debug.Log("Error. Check internet connection!");
    }

}

Код немного более полный:

private Text userText;
private InputField password;
public GameObject advertencia;

    private void Start()
{
    userText = GameObject.Find("UserInput").GetComponent<Text>();
    password = GameObject.Find("PasswordInput").GetComponent<InputField>();
    advertencia = GameObject.Find("Advertencia");
    advertencia.SetActive(false);

}

  //the function with which the corrutina invoked
   public void Log()
{
    Debug.Log("Usuario : " + userText.text + "\nContraseña : " + password.text);

    WWWForm form = new WWWForm();
    form.AddField("codigo", userText.text);
    form.AddField("contrasena", password.text);

    StartCoroutine(logIn(form));

}

1 Ответ

0 голосов
/ 14 июня 2019

Задача

Вы используете URL

http://localhost:3000/login

Вы пытаетесь отправить веб-запрос на хост localhost. Это работает на вашем ПК в Unity, поскольку ПК является сервером, с которым вы пытаетесь связаться.

Сервер не работает на вашем телефоне, но ваш телефон пытается отправить запрос на сам через порт 3000, что, очевидно, не удастся.

Подробнее о Что такое localhost?

Решение

Замените localhost на IP-адрес или сетевой адрес , который на самом деле есть на вашем сервере / ПК, и с вами все будет в порядке.

Чтобы узнать IP вашего ПК, используйте, например,

  • Linux / Unix: в терминале звоните ifconfig
  • Windows: в вызове CMD ipconfig

Конечно, ваш ПК и телефон также должны быть в одной сети или, по крайней мере, маршрутизироваться, чтобы ваш телефон мог связаться с сервером / ПК по указанному IP / сетевому адресу.

Возможно, вам также потребуется настроить брандмауэр вашего ПК, чтобы разрешить входящий трафик через этот порт.

...