Плагин UniWebView для Unity произвольно не работает на Android - PullRequest
0 голосов
/ 17 октября 2018

Для моего мобильного приложения Unity мне нужен элемент веб-просмотра и использование плагина UniWebView.Как показано в коде ниже, я написал скрипт для динамической загрузки строки html.В моем приложении содержащая сцена будет загружаться много раз, в зависимости от взаимодействия с пользователем.

В редакторе и на iOS она работает как положено.На Android веб-представление отображается для первой загрузки сцены после запуска приложения.Но более поздние перезагрузки иногда работают, а иногда терпят неудачу, произвольно окрашивая только белую область.Это происходит, несмотря на то, что загрузочный счетчик работает, так что это просто ошибка визуализации.

Сценарий прилагается ниже.Я поставил сценарий на простой игровой объект панели, который используется только для определения области экрана.

Есть идеи, как мне это решить?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class YouTubePlayer : MonoBehaviour
{

    private UniWebView uniWebView;

    public void Start()
    {
        uniWebView = GetComponent<UniWebView>();

        if (uniWebView == null)
        {
            Debug.Log("YOUTUBE PLAYER: Adding uniwebview Component");
            uniWebView = gameObject.AddComponent<UniWebView>();
        }

        uniWebView.OnPageStarted += (view, url) =>
        {
            Debug.Log("YOUTUBE PLAYER: OnPageStarted with url: " + url);
        };
        uniWebView.OnPageFinished += (view, statusCode, url) =>
        {
            Debug.Log("YOUTUBE PLAYER: OnPageFinished with status code: " + statusCode);
        };
        uniWebView.OnPageErrorReceived += (UniWebView webView, int errorCode, string errorMessage) =>
        {
            Debug.Log("YOUTUBE PLAYER: OnPageErrorReceived errCode: " + errorCode
                      + "\n\terrMessage: " + errorMessage);
        };

        uniWebView.SetShowSpinnerWhileLoading(true);
        uniWebView.ReferenceRectTransform =    gameObject.GetComponent<RectTransform>();

        uniWebView.LoadHTMLString(YoutubeHTMLString, "https://www.youtube.com/");

        uniWebView.Show(true);
    }

    private static string YoutubeHTMLString =
       @"<html>
            <head></head>
            <body style=""margin:0\"">
                <iframe width = ""100%"" height=""100%"" 
                    src=""https://www.youtube.com/embed/Ccj_H__4KGQ"" frameborder=""0"" 
                    allow=""autoplay; encrypted-media"" allowfullscreen>
                </iframe>
            </body>
         </html>";
}

1 Ответ

0 голосов
/ 17 октября 2018

Я обнаружил, что нужно вызвать Show () перед LoadHTMLString () для компонента UniWebView.Ниже показаны исправленные последние строки метода Start ().

    ...
    uniWebView.SetShowSpinnerWhileLoading(true);
    uniWebView.ReferenceRectTransform = gameObject.GetComponent<RectTransform>();

    uniWebView.Show(true);

    uniWebView.LoadHTMLString(YoutubeHTMLString, "https://www.youtube.com/");
}

Я не могу сказать, почему это решение работает, но считаю его ошибкой (в UniWebView, Unity или Android).Это может быть связано с асинхронными потоками в фоновом режиме, которые иногда создают проблемный порядок на Android (я использовал старый Nexus 5 с Android 6.0.1).

Тем не менее, я надеюсь, что это кому-то поможет, как у меня былодва плохих дня проб и ошибок ...; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...