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

Flutter WebView中如何接受第三方Cookie?

Flutter WebView 第三方Cookie设置方案

针对你遇到的WebView无法存储第三方Cookie的问题,在Flutter中可以通过webview_flutter插件实现类似Android原生CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView,true)的效果,具体实现如下:

1. 添加依赖

在项目的pubspec.yaml中添加webview_flutter依赖:

dependencies:
  flutter:
    sdk: flutter
  webview_flutter: ^4.4.0 # 可使用最新稳定版

执行flutter pub get完成依赖安装。

2. 配置WebView允许第三方Cookie

Android端配置

通过WebViewController的Android专属设置开启第三方Cookie支持:

import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_flutter_android/webview_flutter_android.dart'; // Android平台专属包

WebViewController _controller = WebViewController()
  ..setJavaScriptMode(JavaScriptMode.unrestricted)
  ..loadRequest(Uri.parse("你的网站地址"))
  ..setNavigationDelegate(NavigationDelegate(
    onPageStarted: (String url) {},
    onPageFinished: (String url) {},
  ))
  // Android端开启第三方Cookie
  ..androidSettings = AndroidWebViewControllerSettings()
    ..setAcceptThirdPartyCookies(true);

iOS端配置

iOS平台默认允许第三方Cookie,若遇到异常,可通过iOS专属设置确认开启,同时需确保Info.plist配置了正确的网络权限:

import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart'; // iOS平台专属包

WebViewController _controller = WebViewController()
  ..setJavaScriptMode(JavaScriptMode.unrestricted)
  ..loadRequest(Uri.parse("你的网站地址"))
  ..setNavigationDelegate(NavigationDelegate(
    onPageStarted: (String url) {},
    onPageFinished: (String url) {},
  ))
  // iOS端确认Cookie相关配置(默认已开启,按需调整)
  ..iosSettings = IosWebViewControllerSettings()
    ..allowsInlineMediaPlayback = true
    ..javaScriptCanOpenWindowsAutomatically = true;

如果网站使用HTTP协议,需在iOS的Info.plist中添加以下配置以允许非HTTPS请求:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

3. 完整使用示例

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_flutter_android/webview_flutter_android.dart';
import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart';

class WebViewLoginPage extends StatefulWidget {
  const WebViewLoginPage({super.key});

  @override
  State<WebViewLoginPage> createState() => _WebViewLoginPageState();
}

class _WebViewLoginPageState extends State<WebViewLoginPage> {
  late final WebViewController _controller;

  @override
  void initState() {
    super.initState();
    // 根据平台初始化WebViewController
    if (WebViewPlatform.instance is WebKitWebViewPlatform) {
      _controller = WebViewController.fromPlatformCreationParams(
        WebKitWebViewControllerCreationParams(),
      );
    } else {
      _controller = WebViewController.fromPlatformCreationParams(
        AndroidWebViewControllerCreationParams(),
      );
    }

    _controller
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..loadRequest(Uri.parse("https://你的登录页面地址"))
      ..setNavigationDelegate(NavigationDelegate(
        onPageFinished: (String url) {
          // 页面加载完成后可检查Cookie状态
          _controller.runJavaScript("document.cookie").then((value) {
            debugPrint("当前Cookie: $value");
          });
        },
      ));

    // Android平台单独设置第三方Cookie
    if (_controller.platform is AndroidWebViewController) {
      (_controller.platform as AndroidWebViewController)
          .setAcceptThirdPartyCookies(true);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("WebView登录")),
      body: WebViewWidget(controller: _controller),
    );
  }
}

注意事项

  • 确保使用webview_flutter的最新稳定版,不同版本的API可能存在差异
  • 若网站Cookie为跨域类型,需确认服务器端的Cookie配置(如SameSite属性)是否允许在WebView中存储
  • 测试时可通过runJavaScript("document.cookie")查看Cookie是否成功设置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:02:20