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

如何在Flutter应用中设置第三方Cookie?webview_flutter包场景实现

Flutter第三方Cookie设置指南

一、原生Flutter应用(非WebView场景)

如果你的Flutter应用通过HTTP请求(比如用http或dio包)和第三方服务交互,要携带第三方Cookie,可按以下方式操作:

用http包的实现

  1. 自定义HttpClient实例,手动添加第三方Cookie:
import 'dart:io';

final client = HttpClient();
// 添加目标第三方域名的Cookie
client.cookies.add(Cookie('cookie_key', 'cookie_value')
  ..domain = 'third-party-domain.com'
  ..path = '/'
  ..expires = DateTime.now().add(const Duration(days: 30)));

// 发起请求
final request = await client.getUrl(Uri.parse('https://third-party-domain.com/api/get-data'));
final response = await request.close();
  1. 注意:跨域请求带Cookie时,第三方服务必须开启CORS的凭证允许(返回Access-Control-Allow-Credentials: true响应头),同时请求要开启withCredentials(http包中通过HttpClient的withCredentials属性控制)。

用dio包的实现

借助dio_cookie_manager插件自动管理Cookie,也可以手动添加第三方Cookie:

import 'package:dio/dio.dart';
import 'package:dio_cookie_manager/dio_cookie_manager.dart';
import 'package:cookie_jar/cookie_jar.dart';

final dio = Dio();
final cookieJar = CookieJar();
dio.interceptors.add(CookieManager(cookieJar));

// 手动添加第三方Cookie到CookieJar
cookieJar.saveFromResponse(
  Uri.parse('https://third-party-domain.com'),
  [Cookie('cookie_key', 'cookie_value')..domain = 'third-party-domain.com'],
);

// 发起带凭证的请求
final response = await dio.get('https://third-party-domain.com/api/get-data',
    options: Options(headers: {'withCredentials': true}));

二、webview_flutter包中设置第三方Cookie

用webview_flutter展示优惠信息时,完全可以设置第三方Cookie,但要注意iOS和Android的平台差异,具体操作如下:

1. 核心设置步骤

确保你用的是最新版webview_flutter,通过WebViewController配置Cookie:

import 'package:webview_flutter/webview_flutter.dart';

WebViewController? _webViewController;

void initWebView() {
  _webViewController = WebViewController()
    ..setJavaScriptMode(JavaScriptMode.unrestricted)
    ..loadRequest(Uri.parse('https://your-promo-page.com'))
    // 添加第三方Cookie
    ..setCookie(const WebViewCookie(
      name: 'promo_user_id',
      value: 'user_12345',
      domain: 'third-party-promo-domain.com', // 第三方Cookie的目标域名
      path: '/',
    ));
}

2. 平台专属配置

  • Android:无需额外配置,只要确保JavaScriptMode设为unrestricted,且Cookie的域名格式正确(不能是纯IP)即可。
  • iOS:
    若第三方域名用的是HTTP而非HTTPS,需要在Info.plist中配置ATS规则,允许该域名的不安全请求:
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSExceptionDomains</key>
      <dict>
        <key>third-party-promo-domain.com</key>
        <dict>
          <key>NSIncludesSubdomains</key>
          <true/>
          <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
          <true/>
        </dict>
      </dict>
    </dict>
    
    iOS 14+对跨域Cookie限制更严,如果Cookie不生效,建议让第三方服务把Cookie的SameSite属性设为None; Secure(仅限HTTPS环境),或者在Web页面中通过JS辅助设置。

3. 验证Cookie是否生效

可以在WebView中注入JS来查看当前Cookie:

_webViewController?.runJavaScriptReturningResult('document.cookie').then((result) {
  print('WebView当前Cookie: $result');
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:05:24