ios - 带有 ionic-webview 的 Cordova 移动应用程序无法在 iOS 14 WkWebview 中存储/重试 session cookie

标签 ios cordova cookies wkwebview cordova-plugin-ionic-webview

我正在将 iOS 14 设备/模拟器用于我的 Cordova 移动应用程序,该应用程序使用带有 WkWebView 设置的 cordova-plugin-ionic-webview。
我在 config.xml 中设置了以下选项

<access origin="myapp://mobileapp" />
<allow-navigation href="myapp://mobileapp" />
这使我所有的 xhr 调用都具有“origin:myapp://mobileapp” header 。我已经适本地定义了所有 CORS header 。
现在我的身份验证 XHR 调用有 2 个 API(a)身份验证和(b)加强操作。
API (b) 将使用由 API (a) 设置的 HTTPOnly 安全 cookie,以便做出适当的响应。
以上两个 API 都可以与 UIWebview、iOS 13.5、iOS 13.7 模拟器和设备完美配合。但是在 iOS 14、iOS 13.3 中失败。在分析时,我看到 API (a) 中发送的 cookie 未存储在 WkWebview 中,因此在调用 API (b) 时不会发送它们。所以第二个 API 无法完成。
我见过cookies ignored in first execution , tracking preventionwkwebview bug但无法确定问题。
当我在 WkWebview 中使用 In-AppBrowser 时,API 运行良好,但仅在主cordova View 中失败。
在使用 cusotm origin 和跨平台 XHR 调用时,我是否必须在 ionic-webviw 插件中设置任何特殊设置?
我的 XHR 调用是针对“* https://mydomain.app.com/api/firstapi*" 和”* https://mydomain.app.com/api/secondapi*" 进行的。 ,而 firstapi 将发送 header “set-cookie”,域设置为“.app.com”。那么当我们使用自定义来源进行 XHR 调用时,这些类型的 cookie 将被视为第三方 cookie 或第一方 cookie?
这里的任何帮助都会非常有帮助。我正在寻找使用 HTTPOnly cookie 实现 Cordova+WkWebView+XHR 登录调用的正确方法

最佳答案

XCode 12 + iOS 14 永久停止同步第三方 cookie 并引入 Intelligent Tracking Prevention技术。苹果对此的解决方案是使用 App Bound domain .
不幸的是,目前我们无能为力。有像 nativeXHR 这样的插件它试图通过将 API 调用路由到 native 代码来解决,但不会将 cookie 同步到 wkwebview 的cordova 实例。
更新:
如果只想使用一台服务器,cookies 仍然可以同步。在 config.xml 中设置以下首选项以匹配您的域。通过这种方式,origin 将被设置为 app://yourdomain.com。因此 wkwebview 将与域/子域 *.yourdomain.com 同步 cookie。

<preference name="scheme" value="https" />
<preference name="hostname" value="yourdomain.com" />

关于ios - 带有 ionic-webview 的 Cordova 移动应用程序无法在 iOS 14 WkWebview 中存储/重试 session cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63998028/

相关文章:

ios - 点击imageview的动画,酷炫的小放大

ios - "Find Call Hierarchy"无法在 Xcode 中工作(带有 cocoapods 的大项目)

ios - 在 iOS 上嵌入 Mono

android - GUI 在高 DPI 显示器上非常小

javascript - JWT:用户打开新标签页时如何处理 GET 请求?

ios - 使用自定义按钮和FBSession登录时如何获取用户数据

angular - 找不到模块 "ionic-native"

ios - cordova 模拟 iOS 无法通过命令行运行,但可以通过 Xcode 运行

node.js - WS 握手时不传递 Cookie header

google-chrome - Chrome 的 "Incognito Mode"究竟做了什么?