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

如何在WKWebView中启用跨站跟踪以正常获取iFrame内第三方Cookie

iOS 14 WKWebView iFrame跨站Cookie访问适配方案

iOS 14开始WKWebView默认启用智能跟踪预防(ITP),规则逻辑和桌面端Safari存在差异,移动端WKWebView的跨站Cookie限制优先级高于系统Safari全局开关,所以会出现桌面端正常、移动端WebView异常的情况。以下是完整修复步骤:

已配置项的修正方案

  • NSCrossWebsiteTrackingUsageDescription仅为权限弹窗的描述文案,本身不会直接放行Cookie,需要你在代码中主动调用权限申请API,用户授权后配置才会生效:
    Swift代码示例:
    import WebKit
    WKWebsiteDataStore.default().requestCookieConsent { policy in
        // policy为.allow代表授权通过
    }
    
    Objective-C代码示例:
    #import <WebKit/WebKit.h>
    [WKWebsiteDataStore.defaultDataStore requestCookieConsentWithCompletionHandler:^(WKHTTPCookieAcceptPolicy policy) {
        // policy == WKHTTPCookieAcceptPolicyAllow 代表授权成功
    }];
    
  • 你配置的WKAppBoundDomains规则不符合iOS 14的要求,该配置不支持通配符二级以上域名,也无需罗列所有子域名,仅需配置你应用的主域名和第三方服务顶级域名即可,正确配置格式:
    <key>WKAppBoundDomains</key>
    <array>
        <string>your-app-main-domain.com</string>
        <string>thirdparty.com</string>
    </array>
    
    注意:该配置最多仅支持添加10个域名,超出部分会自动失效。

额外必须添加的配置

初始化WKWebView时,需要手动修改配置项启用相关权限:

let config = WKWebViewConfiguration()
config.websiteDataStore = .default()
// 开启跨源资源访问权限
config.preferences.setValue(true, forKey: "crossOriginRequestPolicy")
if #available(iOS 14.0, *) {
    // 关键:启用App Bound Domains限制,否则WKAppBoundDomains配置不会生效
    config.limitsNavigationsToAppBoundDomains = true
}

第三方服务适配要求

第三方返回的Cookie必须携带SameSite=None; Secure属性,如第三方未适配该规则,哪怕客户端所有配置正确,iOS 14也会自动拦截该Cookie。你可以联系第三方服务调整Cookie属性,也可以在WKWebView的请求拦截逻辑中手动给Cookie补充该属性。

验证步骤

  1. 卸载测试设备上的旧应用,清理所有缓存和网站数据
  2. 重新安装应用,首次打开时会弹出跨站跟踪权限申请弹窗,点击允许
  3. 进入WebView页面加载完成后,用Safari开发者工具连接WebView,查看存储选项卡下的第三方域名Cookie是否正常写入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:42:02