使用 NSCrossWebsiteTrackingUsageDescription 请求用户为 WKWebView 禁用 ITP

Posted

技术标签:

【中文标题】使用 NSCrossWebsiteTrackingUsageDescription 请求用户为 WKWebView 禁用 ITP【英文标题】:Using NSCrossWebsiteTrackingUsageDescription to request user disable ITP for WKWebView 【发布时间】:2020-11-18 16:19:41 【问题描述】:

ios 14 版本正在捕获第三方身份验证/设备 cookie,我们似乎需要禁用智能跟踪预防 (ITP)。可用的文档(planet.webkit.org)建议我们在项目的 Info.plist 中设置一个特定的设置键和“Purpose String”:

WKWebView 中的智能跟踪预防

另外在 iOS 14.0 和 macOS Big Sur 中,智能跟踪预防 (ITP) 已启用 默认情况下在所有 WKWebView 应用程序中。 [...]

在某些极端情况下,用户可能需要禁用 ITP 保护, 例如,当依赖应用程序开发人员之外的 Web 内容时 控制。 应用程序可以发出信号,允许用户禁用 ITP 通过为密钥添加目的字符串 NSCrossWebsiteTrackingUsageDescription 应用程序的 Info.plist。 何时 目前,此键会导致应用程序的设置屏幕显示 禁用 ITP 的用户控件。无法读取或更改设置 通过 API 调用。

https://planet.webkit.org/

我相信我已经做到了:

<!-- Info.plist -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    ...
    <key>NSCrossWebsiteTrackingUsageDescription</key>
    <string>Allow authentication and device trackers.</string>
    ...
</dict>
</plist>

我希望一个模态 iOS 对话框显示请求权限,使用该文本来解释权限请求。但是,我从未收到任何对话或请求,而且 ITP 仍在干扰身份验证/设备识别过程。

这可能取决于以下在实践中的含义。

此键使应用程序的设置屏幕显示一个用户控件以禁用 ITP。

我如何让这个过程工作并允许禁用 ITP?

【问题讨论】:

【参考方案1】:

这里的解决方案是添加一个设置包(或类似的包),允许 iOS 设备从设备的设置应用程序中显示设置页面。基本上,遵循Settings.bundle tutorial 和Info.plist 设置NSCrossWebsiteTrackingUsageDescription 将触发下面屏幕截图中的设置切换。

但不知道为什么它不使用“Purpose String”值。

【讨论】:

有效吗?看我的问题:***.com/questions/65886177/… 添加设置包是它起作用的原因。 我们必须在设置包中做任何事情吗?同样的事情,我们可以通过将 NSCrossWebsiteTrackingUsageDescription 添加到 plist 文件中来实现同样的事情。我面临的问题是开关不能正常工作,当你回到设置屏幕时它会刷新。 @NamanVaishnav 我导入了包并在项目的Info.plist 中有设置。就是这样。 它对我不起作用。在我的情况下,我们正在加载嵌入式画面视图(在 iframe 中)

以上是关于使用 NSCrossWebsiteTrackingUsageDescription 请求用户为 WKWebView 禁用 ITP的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)