我android.webkit.Webview
在基于 Java 的原生 android 应用程序中使用标准。在 Web 视图中,用户登录到 web 应用程序。成功登录后,webapp 会存储一个带有访问令牌的 cookie。我想访问这个 cookie。
Cookie 具有以下特征:
- HTTPS URL 结构如:
https://api.example.com
httpOnly
旗帜Secure
旗帜
在 Android API 级别 29 或 API 级别 30 上,调用CookieManager.getCookie("https://api.example.com")
按预期工作并返回包含 Cookie 值的字符串。
在 Android API 级别 28 或更低版本上,调用相同的方法总是返回null
. 尽管如此,调用CookieManager.hasCookies()
返回和 webapp按预期工作true
的事实表明 cookie必须存在于某处。Webview
我需要保留 cookie 以处理未在 Webview 中执行的“外部”下载和其他 API 调用。
为什么这在 API 28 下不起作用,我该如何解决?
已经尝试过的事情:
- 从,调用
CookieManager.getCookie("https://api.example.com")
不同事件挂钩的方法(例如, , , , )WebChromeClient
WebViewClient
onPageStarted
onPageFinished
onProgressChanged
shouldInterceptRequest
shouldOverrideUrlLoading
CookieManager.flush()
在不同的地方使用将 cookie 从内存刷新到持久存储。- 通过拦截流量来提取cookie(使用现有的钩子太hacky了)
假设:
- 线程?,API 支持低于 28 不完整?