ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ArkWeb 第三方 Cookie 怎么管?智能防跟踪与绕过域名实践【鸿蒙心迹】

ArkWeb 第三方 Cookie 怎么管?智能防跟踪与绕过域名实践【鸿蒙心迹】 大家好我是[晚风依旧似温柔]新人一枚欢迎大家关注~本文目录前言一、先分清两个问题第三方 Cookie 和智能防跟踪不是一回事二、HarmonyOS 7 下先确认开发基线三、搭一个最小测试场景四、开启第三方 Cookie再打开智能防跟踪五、怎么观察请求变化六、业务确实依赖这个域名怎么办七、业务恢复以后别忘了删除绕过域名八、几个特别容易理解错的地方1. ITP 不是“禁用 Cookie”2. 第三方域名不一定就是跟踪型网站3. 没有 Cookie就观察不到“Cookie 被禁止携带”的差异4. 绕过列表不是当前 Web 组件的局部变量九、实际项目中怎么排查十、隐私功能不能替代隐私合规说明开发经验总结前言H5 页面接入统计、登录、内容分发等第三方服务后经常会出现第三方 Cookie。真正麻烦的地方不只是“Cookie 能不能用”而是如何在业务兼容与隐私保护之间建立清晰边界。ArkWeb 提供了智能防跟踪Intelligent Tracking Prevention下面简称 ITP能力。按照华为官方文档的定义当跟踪型网站作为第三方插入到其他网页时其发送的网络请求将禁止携带 Cookie。同时应用还能获得拦截结果并为确有业务需要的域名配置绕过列表。该能力默认没有开启。这次我们不讨论一整套 Web 隐私体系只做一个最小实践在 HarmonyOS 7 的 ArkWeb 页面中开启智能防跟踪观察被识别的跟踪域名再通过绕过域名列表验证策略变化。本文代码依据当前华为官方公开文档整理没有声称已经在具体工程或真机上编译、运行。实际项目仍应使用自己的 H5、SDK 与目标设备完成验证。一、先分清两个问题第三方 Cookie 和智能防跟踪不是一回事在一个典型 H5 页面里可以先用一个简单结构理解请求关系https://www.example-a.com/index.html │ ├── example-a.com 自己的资源 │ └── tracker.example-b.com 的脚本 / 图片 / iframe本文把顶层页面所在的example-a.com看作当前页面上下文把页面中另外加载的example-b.com作为第三方资源来观察。这里比较容易出现一个理解偏差ArkWeb 的智能防跟踪并不等于“关闭所有第三方 Cookie”。华为官方对 ITP 的描述有两个限定词一是“跟踪型网站”二是“作为第三方插入其他网页”。也就是说开启 ITP 后需要关注的是被 ArkWeb 识别为跟踪型网站的第三方请求而不能简单理解成所有跨域请求都会失去 Cookie。ArkWeb 另外还有WebCookieManager.putAcceptThirdPartyCookieEnabled()用于设置是否允许发送和接收第三方 Cookie。华为官方 ArkWeb FAQ 在处理依赖第三方 Cookie 的 H5 页面时也给出了这个接口的使用示例。因此可以把两个控制层次分开能力关注点putAcceptThirdPartyCookieEnabled()WebCookieManager 是否允许发送、接收第三方 CookieenableIntelligentTrackingPrevention()对被识别为跟踪型网站的第三方请求进行智能防跟踪绕过域名列表对确有业务需要的域名绕过 ITP这也是本文实践最核心的思路测试时先明确允许第三方 Cookie再开启 ITP这样才容易把“第三方 Cookie 总开关”和“智能防跟踪策略”区分开。二、HarmonyOS 7 下先确认开发基线华为当前的 HarmonyOS 升级适配指南明确说明HarmonyOS 7.0 对应 API 26.0.0并建议开发者升级到对应开发套件完成应用适配。本文因此按下面的开发基线组织代码系统背景HarmonyOS 7.0API 基线API 26.0.0Web 能力ArkWebArkTS 导入kit.ArkWebWeb 控制对象webview.WebviewControllerCookie 管理webview.WebCookieManager在线 H5 所需权限ohos.permission.INTERNET需要特别说明一个版本问题当前能够直接核验的华为“使用智能防跟踪功能”指南确认了本文所使用的 ITP 接口但该指南正文没有展示这些接口各自的历史首发 API Level。因此本文只把HarmonyOS 7 / API 26.0.0 当前可使用作为兼容性基线不把第三方资料中的历史首发版本数字写进结论。如果项目的compatibleSdkVersion低于当前开发基线还应在对应 SDK 的官方 API Reference 中再次确认接口起始版本不能因为 API 26.0.0 可以调用就反推所有历史版本都支持。三、搭一个最小测试场景为了加载在线测试页应用首先需要网络权限。华为 ArkWeb FAQ 明确指出Web 组件访问网络资源时需要在module.json5中声明ohos.permission.INTERNET。最小配置可以围绕网络权限展开{ module: { // 其他配置省略 requestPermissions: [ { name: ohos.permission.INTERNET } ] } }然后准备一个在线测试页面。为了避免把“任意第三方域名”错误地说成“跟踪域名”测试页不要预设 ArkWeb 一定会拦截某个自己随便创建的域名。更可靠的测试方法是准备一个顶层测试页面 A。页面 A 加载一个第三方域名 B 的资源。确认 B 在正常情况下确实存在 Cookie 相关业务。开启 ITP。以onIntelligentTrackingPreventionResult的回调结果判断 ArkWeb 是否把 B 识别成跟踪型网站。只有出现回调后再使用返回的trackerHost做绕过列表实验。测试页本身并不复杂。例如!DOCTYPEhtmlhtmllangzh-CNheadmetacharsetUTF-8titleArkWeb ITP Test/title/headbodyh2ArkWeb ITP Test Page/h2!-- 替换成测试环境中实际存在的第三方资源 --imgsrchttps://tracker.example-b.com/pixelaltthird-party resourcep请结合 ArkWeb 回调和服务端请求日志观察 Cookie 行为。/p/body/html这里的tracker.example-b.com只是展示测试拓扑的占位域名不能据此认定它会被 ArkWeb 判定为跟踪网站。真正的判定结果应该看 ArkWeb 的 ITP 回调。这点很重要。如果随便准备两个域名发现开启 ITP 前后没有区别并不能直接得出“智能防跟踪无效”的结论因为第三方域名本身可能没有进入 ITP 的处理范围。四、开启第三方 Cookie再打开智能防跟踪先把第三方 Cookie 的测试基线固定下来。华为官方 FAQ 给出的方式是调用webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(true);官方示例把 Cookie 配置放在aboutToAppear()中。接下来创建一个最小 ArkUI 页面import{webview}fromkit.ArkWeb;import{BusinessError}fromkit.BasicServicesKit;EntryComponentstruct Index{controller:webview.WebviewControllernewwebview.WebviewController();privatetrackerHost:stringtracker.example-b.com;aboutToAppear():void{// 为了观察 ITP 与普通第三方 Cookie 控制的区别// 测试阶段明确允许第三方 Cookie。webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(true);}build(){Column({space:8}){Button(开启智能防跟踪).onClick((){try{this.controller.enableIntelligentTrackingPrevention(true);console.info(ITP enabled);}catch(error){console.error(enable ITP failed, code:${(errorasBusinessError).code},message:${(errorasBusinessError).message});}})Button(检查智能防跟踪状态).onClick((){try{constenabledthis.controller.isIntelligentTrackingPreventionEnabled();console.info(ITP enabled:${enabled});}catch(error){console.error(check ITP failed, code:${(errorasBusinessError).code},message:${(errorasBusinessError).message});}})Web({src:https://www.example-a.com/itp-test.html,controller:this.controller}).onIntelligentTrackingPreventionResult((details){console.info(ITP result: websiteHost${details.host},trackerHost${details.trackerHost});}).layoutWeight(1)}.width(100%).height(100%)}}其中example-a.com和example-b.com都需要换成自己的测试环境。真正需要关注的是三个接口。enableIntelligentTrackingPrevention(true)用来开启当前 Web 组件的智能防跟踪功能。官方说明该功能默认没有开启isIntelligentTrackingPreventionEnabled()可以查询当前 Web 页面是否开启onIntelligentTrackingPreventionResult则在 ITP 工作时把相关网站域名和跟踪型网站域名回调给应用。这里不要只盯着页面有没有显示异常。对于 ITP 测试而言回调里的host和trackerHost比“页面看起来有没有变化”更有定位价值。五、怎么观察请求变化如果只看页面 UI很难判断 Cookie 到底发生了什么变化。华为官方资料说明ArkWeb 可以通过 DevTools 调试前端页面开发者可以借助 DevTools 分析网页请求和前端行为。官方 FAQ 同样建议在 Web 页面异常定位时使用 DevTools。测试时建议固定同一个页面和同一组请求做三组对照场景 A允许第三方 Cookie关闭 ITP 场景 B允许第三方 Cookie开启 ITP 场景 C开启 ITP同时把目标域名加入绕过列表观察时重点看两处。一处是 ArkWeb 的.onIntelligentTrackingPreventionResult((details){console.info(websiteHost${details.host});console.info(trackerHost${details.trackerHost});})另一处是 H5 的网络请求。对于测试环境中确认存在 Cookie 的第三方请求可以结合 DevTools 和服务端请求日志对照请求头变化。按照官方 ITP 定义如果目标网站被识别为跟踪型网站并且它以第三方形式出现在页面中开启 ITP 后相关网络请求将禁止携带 Cookie。这里应该记录“实际观察到什么”而不是提前写死结果。特别是自建测试域名如果没有触发onIntelligentTrackingPreventionResult应先确认它是否真的被 ArkWeb 识别为跟踪型网站。六、业务确实依赖这个域名怎么办隐私保护策略不能简单变成“一刀切”。某些 H5 可能确实依赖第三方 Cookie 完成已有业务流程。华为官方 ArkWeb FAQ 也明确给出了通过putAcceptThirdPartyCookieEnabled(true)解决页面依赖第三方 Cookie 的场景。对于已经开启 ITP、但经过业务和隐私评估后确实需要放行的域名ArkWeb 提供了绕过域名列表。官方示例使用的是静态接口webview.WebviewController.addIntelligentTrackingPreventionBypassingList(hostList);例如Button(加入 ITP 绕过列表).onClick((){try{consthostList:Arraystring[this.trackerHost];webview.WebviewController.addIntelligentTrackingPreventionBypassingList(hostList);console.info(ITP bypass added:${this.trackerHost});}catch(error){console.error(add bypass failed, code:${(errorasBusinessError).code},message:${(errorasBusinessError).message});}})这里建议不要直接把一批第三方域名全部塞进去。更稳妥的做法是先通过details.trackerHost确认实际触发 ITP 的域名再判断该域名对应的业务是否确实需要 Cookie。另一个容易忽略的点是官方明确说明这些绕过域名列表对整个应用生效而不是只对某一个 Web 组件生效。因此一个页面为了兼容业务加入绕过列表影响范围可能不止当前页面。实际工程最好把这类配置集中管理而不是散落在多个页面组件中。七、业务恢复以后别忘了删除绕过域名绕过列表不是只能增加。ArkWeb 提供webview.WebviewController.removeIntelligentTrackingPreventionBypassingList(hostList);可以删除指定域名Button(删除 ITP 绕过域名).onClick((){try{consthostList:Arraystring[this.trackerHost];webview.WebviewController.removeIntelligentTrackingPreventionBypassingList(hostList);console.info(ITP bypass removed:${this.trackerHost});}catch(error){console.error(remove bypass failed, code:${(errorasBusinessError).code},message:${(errorasBusinessError).message});}})如果测试结束需要把此前通过添加接口设置的域名全部清掉可以调用webview.WebviewController.clearIntelligentTrackingPreventionBypassingList();例如Button(清空 ITP 绕过列表).onClick((){webview.WebviewController.clearIntelligentTrackingPreventionBypassingList();console.info(ITP bypass list cleared);})添加、删除和清空绕过列表都是华为官方智能防跟踪指南明确提供的能力。从工程设计角度看这组 API 更适合被当作隐私策略配置管理而不是普通页面状态。特别是应用里存在多个 Web 组件时更要记住它是应用级绕过列表。八、几个特别容易理解错的地方1. ITP 不是“禁用 Cookie”enableIntelligentTrackingPrevention(true)不能简单解释成 Cookie 总开关。官方定义针对的是“跟踪型网站作为第三方插入其他网页”的场景。普通 Cookie 管理和 ITP 是两个不同层面的控制。2. 第三方域名不一定就是跟踪型网站这是测试时最容易误判的一点。自己创建a.example.com和b.example.com让 A 请求 B只能构造第三方请求关系不能据此证明 B 会被 ArkWeb 的智能防跟踪能力识别为跟踪型网站。所以测试程序一定要保留onIntelligentTrackingPreventionResult让 ArkWeb 自己告诉应用发生了什么。3. 没有 Cookie就观察不到“Cookie 被禁止携带”的差异如果第三方服务本来没有建立 Cookie或者测试开始前已经通过其他策略禁止第三方 Cookie那么开启 ITP 后再观察请求很可能看不到有意义的差异。这也是本文测试阶段显式调用webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(true);的原因。它的目的不是建议所有正式应用都无条件允许第三方 Cookie而是建立一个可比较的测试基线。生产环境应该按照业务需求和隐私要求决定 Cookie 策略。4. 绕过列表不是当前 Web 组件的局部变量官方明确说明绕过列表作用于整个应用。因此不建议把addIntelligentTrackingPreventionBypassingList()理解成某个页面临时的“放行按钮”。如果业务真的需要使用最好维护清楚域名来源、业务用途和移除条件。九、实际项目中怎么排查遇到“开启智能防跟踪后 H5 某个功能不正常”时可以按下面的顺序检查先看系统和 SDK 基线。HarmonyOS 7.0 当前对应 API 26.0.0低版本兼容项目需要额外确认目标 API Reference。检查网络权限。在线 H5 需要确认module.json5已声明ohos.permission.INTERNET。检查第三方 Cookie 总体策略。如果业务本身依赖第三方 Cookie先确认WebCookieManager的相关配置。检查 ITP 是否真的开启。使用isIntelligentTrackingPreventionEnabled()不要只凭代码路径猜测。看 ITP 回调。重点记录host和trackerHost确认异常请求是否真的进入智能防跟踪处理范围。再看网络请求。使用 DevTools 和测试服务端日志比较同一请求的变化而不是只看页面有没有白屏。最后评估绕过列表。只有明确业务必要性后再添加域名并记住该列表是应用级配置。业务完成迁移后及时移除。可以删除指定域名也可以在测试结束时清空绕过列表。这样的排查顺序比直接“关掉 ITP 看看能不能恢复”更容易定位问题也能避免为了兼容一个 H5 功能把整个应用的防跟踪能力长期关闭。十、隐私功能不能替代隐私合规说明最后这个边界必须单独说。开启 ArkWeb 智能防跟踪只代表应用使用了一项 Web 隐私保护技术能力并不意味着应用因此自动完成隐私合规。华为官方《应用隐私保护》明确提出应用处理个人数据时需要遵循公开透明、数据最小化、用户选择与控制等原则应用采集个人数据时应告知用户个人信息的使用方式处理个人数据还需要满足相应的用户同意要求。华为 AppGallery Connect 的 HarmonyOS 应用隐私政策配置文档也要求开发者根据实际个人信息处理情况如实填写并在处理场景发生变化时及时更新隐私政策。所以不能形成这样的逻辑开启 ITP ↓ 应用不会跟踪用户 ↓ 不需要再说明第三方数据处理正确的处理方式应该是分别解决两个问题技术层 ArkWeb Cookie 策略 智能防跟踪 必要且受控的绕过列表 合规层 实际收集什么 为什么收集 谁在处理 是否向第三方提供 如何告知用户并取得相应授权或合法性基础尤其是为了业务兼容把某个域名加入 ITP 绕过列表以后更应该重新检查这个第三方服务实际处理的数据而不是把“技术上能够绕过”理解成“合规上可以直接绕过”。开发经验总结ArkWeb 的智能防跟踪接口本身并不复杂真正需要弄清楚的是它与普通第三方 Cookie 管理之间的关系。这次最小实践可以整理成四点。第一第三方 Cookie 与 ITP 分层处理。WebCookieManager.putAcceptThirdPartyCookieEnabled()管第三方 Cookie 的发送和接收能力ITP 则进一步针对被识别为跟踪型网站的第三方场景进行处理。第二不要自己猜哪个域名是 tracker。保留onIntelligentTrackingPreventionResult根据 ArkWeb 返回的host和trackerHost做定位。第三绕过列表要谨慎使用。addIntelligentTrackingPreventionBypassingList()、removeIntelligentTrackingPreventionBypassingList()和clearIntelligentTrackingPreventionBypassingList()提供了完整的管理能力但官方明确说明该列表是应用级的。第四隐私技术措施和隐私合规是两件事。ITP 可以减少特定第三方跟踪场景中的 Cookie 携带但应用仍然需要根据实际数据处理行为完成隐私告知、最小化处理和用户控制。如果正在维护一个包含多个第三方 H5、统计脚本或登录服务的 HarmonyOS 应用可以先做一件很具体的事打开 ITP 回调把实际出现的trackerHost梳理出来再逐个判断这些第三方依赖究竟是业务必需还是可以直接移除。相比一上来就维护一张很长的绕过名单这种方式更容易把 Cookie 策略真正管起来。如果觉得有帮助别忘了点个赞关注支持一下~喜欢记得关注别让好内容被埋没
返回列表