UnityWebRequest.SendWebRequest не отправляется на мобильный

Я загружаю Assetbundles, используя метод UnitywebRequest из HTTPS, однако UnityWebRequest.SendWebRequest, кажется, занимает приятное время, чтобы фактически начать получать любые данные.

public static IEnumerator DownloadMenuAssetBundle(string fileName)
{
    string path = Path.Combine(Globals.Platform, fileName);
    UnityWebRequest www = new UnityWebRequest(FileManager.RequestFile(path));//this returns the complete url to the bundle e.g https://mywebsite.com/unity/myBundle
    www.downloadHandler = new DownloadHandlerBuffer();
    www.SendWebRequest();
    while (!www.isDone)
    {
        Debug.Log("response: " + www.responseCode);
        if (www.isNetworkError)
        {
            Debug.Log(www.error);
        }
        Debug.Log("downloaded:" + www.downloadedBytes);
        yield return null;
    }
    Debug.Log("downloaded bytes: " + www.downloadedBytes);
    Debug.Log("final response:" + www.responseCode);

    if (www.error != null)
    {
        Debug.LogError("Encountered error while downloading: <color=blue>" + fileName + "</color>: " + www.error);
    }
    else
    {
       //rest of the logic, this works
    } 

Debug.Log("response: " + www.downloadedBytes); вернусь 0 на случайное количество времени (от нескольких до нескольких минут). Но www. isNetworkError никогда не ударится, и как только байты начнут поступать, он загрузит все это за пару миллисекунд.

Ранее я использовал точно такой же скрипт на http-сервере, и он работал без нареканий без каких-либо задержек, но как только я переключился на https, это заняло некоторое время. Задержка также не происходит в редакторе (Unity version 2017.2.1f1 runtime версия.net 3.5 с совместимостью api 2.0 subset), но происходит на всех моих мобильных устройствах (Oneplus 3, samsung galaxy s8, samsung galaxy s6).

Вначале www.responseCode вернул 301 Moved PermanentlyЯ решил это, используя новый URL-адрес https вместо http-URL, надеясь, что это исправит это. Однако это не так, и теперь я только получаю 200 OK,

Это также противоречивая проблема, потому что время, которое это занимает, не всегда одинаково, и при этом оно не происходит даже постоянно (но происходит большую часть времени).

Может ли это быть проблемой из-за того, что уровень безопасности требует дополнительного времени или сервер не торопится с ответом? если это проблема, как я смогу отследить это (хотя я сомневаюсь, что это хорошо работает в редакторе)?

РЕДАКТИРОВАТЬ: обходной путь, я обошел проблему с помощью WWW класс вместо UnityWebRequest, задержка полностью исчезла, но проверка SSL-сертификата не выполняется, так как Unity, по-видимому, запрещает их по умолчанию. Я бы не стал называть это исправлением, но пока работает.

1 ответ

Всегда проблемы с UnityWebRequest - иногда ничего не имеет смысла с UnityWebRequests...

Вы можете попробовать заменить

 UnityWebRequest www = new UnityWebRequest(FileManager.RequestFile(path));

с

 UnityWebRequest www = new UnityWebRequestAssetBundle(FileManager.RequestFile(path), 0);

Необязательно для тестирования:

Тоже думаю твой while Цикл не "сохранить", чтобы поймать ошибку сети. Я бы предпочел следующее как указано в документации

UnityWebRequest www = new UnityWebRequestAssetBundle(FileManager.RequestFile(path);
yield return www.SendWebRequest();

if (request.isNetworkError || request.isHttpError)
{
    Debug.Log(www.error.ToString());
}
else
{
    // for testing only // if yield return www.SendWebRequest(); is working as expected www.isDone = true here!
    while (!www.isDone)
    {
        Debug.Log("Something is wrong! "  + www.responseCode);
        yield return new WaitForSeconds(0.1f);
    }
    // do whatever you want
}

Надеюсь это поможет.

Другие вопросы по тегам