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

Xamarin.Forms安卓WebView应用关闭后cookie被清除 如何保留登录状态

Xamarin.Forms安卓WebView登录态持久化解决方案

核心原因

Xamarin.Forms封装的安卓WebView默认没有开启Cookie持久化配置,应用进程销毁后内存中的Cookie会被清空,导致重启后登录态丢失。

修复步骤

1. 安卓平台全局配置Cookie规则

在安卓项目MainActivity.cs的OnCreate方法中,加载WebView前添加以下配置:

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    Xamarin.Essentials.Platform.Init(this, savedInstanceState);
    
    // 新增Cookie持久化配置
    if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop)
    {
        CookieManager.Instance.SetAcceptThirdPartyCookies(webView, true);
    }
    CookieManager.Instance.AcceptCookie();
    // 强制将内存Cookie同步写入磁盘
    CookieManager.Instance.Flush();

    LoadApplication(new App());
}

2. 自定义WebView渲染器(可选,兼容更多场景)

如果全局配置不生效,可在安卓项目添加自定义渲染器,在WebView初始化时配置存储规则:

using Android.Content;
using Android.Webkit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

// 替换为你自己的项目命名空间
[assembly: ExportRenderer(typeof(WebView), typeof(YourAppName.Droid.CustomWebViewRenderer))]
namespace YourAppName.Droid
{
    public class CustomWebViewRenderer : WebViewRenderer
    {
        public CustomWebViewRenderer(Context context) : base(context) { }

        protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
        {
            base.OnElementChanged(e);
            if (Control != null)
            {
                // 开启Cookie支持
                CookieManager.Instance.AcceptCookie();
                CookieManager.Instance.SetAcceptThirdPartyCookies(Control, true);
                // 开启DOM存储和缓存,适配用LocalStorage存登录态的站点
                Control.Settings.DomStorageEnabled = true;
                Control.Settings.SetAppCacheEnabled(true);
                Control.Settings.CacheMode = CacheModes.Default;
            }
        }
    }
}

3. 原有加载逻辑保持不变

你现有代码无需修改,直接使用即可:

var wbURL = "https://www.example.com/login/";
webrowser.Source = wbURL;

注意事项

  • 不要在业务逻辑中调用CookieManager.Instance.RemoveAllCookie()、ClearHistory()等清空方法,避免登录态被误删
  • 安卓10及以上系统Cookie持久化逻辑已由系统自动优化,Flush()方法会异步执行磁盘写入,不会阻塞主线程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:03