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
相关产品推荐
相关产品推荐

