You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity安卓端UniWebView切换应用/按Home键后关闭的解决方法

解决Unity安卓应用中UniWebView切后台后会话丢失的问题

我在Unity安卓应用中通过以下代码实现了加载URL的UniWebView:

public void ActivateWebView(string link)
{
    
    var webViewGameObject = new GameObject("UniWebView");
    webView = webViewGameObject.AddComponent<UniWebView>();
    DontDestroyOnLoad(webViewGameObject);
    webView.Frame = new Rect(0, 0, Screen.width, Screen.height);
    webView.OnPageStarted += (UniWebView uni, string url) => 
    {
        print("webView created " + url);
    };
    
    webView.Load(link);
    webView.SetBackButtonEnabled(true);
    webView.Show();
}

但每当按下安卓Home键并切换回应用时,WebView会关闭并回到启动WebView之前的页面。如何保持WebView的会话/上下文,直到我主动按下返回键?UniWebView官方文档未提及安卓应用中切换应用或按Home键后保持WebView会话的相关内容。


核心原因与修复方案

当前代码每次调用ActivateWebView都会创建新的UniWebView实例,安卓应用切后台再返回时,Unity生命周期的变化可能导致WebView被意外隐藏或销毁,加上缺少会话状态的持久化,就会出现回到初始页面的问题。以下是具体修复步骤:

1. 复用WebView实例,避免重复创建

不要每次调用都新建GameObject和组件,改用全局单例模式,确保同一时间只有一个WebView实例:

private UniWebView webView;
private GameObject webViewGameObject;

public void ActivateWebView(string link)
{
    // 仅在实例不存在时创建
    if (webView == null)
    {
        webViewGameObject = new GameObject("UniWebView");
        webView = webViewGameObject.AddComponent<UniWebView>();
        DontDestroyOnLoad(webViewGameObject);
        webView.Frame = new Rect(0, 0, Screen.width, Screen.height);
        webView.SetBackButtonEnabled(true);
        // 开启Cookie和缓存持久化,保留会话状态
        webView.SetCookieEnabled(true);
        webView.SetCacheEnabled(true);

        webView.OnPageStarted += (UniWebView uni, string url) => 
        {
            print("webView loaded " + url);
        };

        // 用户主动关闭WebView时清理实例
        webView.OnClosed += (UniWebView uni) => 
        {
            webView = null;
            Destroy(webViewGameObject);
        };
    }

    // 仅当链接变化或首次加载时重新加载
    if (string.IsNullOrEmpty(webView.Url) || webView.Url != link)
    {
        webView.Load(link);
    }

    // 确保WebView处于显示状态
    webView.Show();
}

2. 监听应用前后台切换,恢复WebView显示

在脚本中添加Unity生命周期方法,当应用从后台返回时强制显示WebView:

private void OnApplicationPause(bool pauseStatus)
{
    // 应用从后台回到前台且WebView实例存在时,重新显示
    if (!pauseStatus && webView != null)
    {
        webView.Show();
    }
}

3. 验证会话持久化

开启Cookie和缓存后,WebView会自动保留登录状态、浏览历史等会话信息,切后台再返回时无需重新加载初始页面,直接恢复到之前的浏览状态。


内容的提问来源于stack exchange,提问作者Anurag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:37:25