问题标签 [android-cookiemanager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - CookieManager.getCookie() 始终返回 null(版本 <= API 28 (Pie))
我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 不完整?
android - Android CookieManager.setCookie 不会跨不同进程同步?
在Android中,我们可以有不同的进程(例如另一个进程中的一个服务)。
但是,我注意到 CookieManager(来自 android.webkit.CookieManager)不会在整个过程中同步其新设置的 Cookie。
我在 MainActivity 中有一个设置 Cookie 的函数
如果我在 MainActivity 或 MainService(同一进程中的服务)中读取它,那么我可以读取它。
但是,如果我在OtherService(另一个进程中的服务)中读取它,那么它可能不会得到它。
为了清楚地证明这一点,我创建了一个应用程序,如下所示。您可以在此处获取代码
1.全新安装应用
- 安装新创建的应用程序
- 点击Main Process Service:Log(TrackingMe)显示没有Cookie Set<正确>
- 点击Other Process Service:Log(TrackingMe)显示没有Cookie Set<正确>
- 点击 Write Cookie 将 cookie 写入 CookieManager
- 点击Main Process Service:Log(TrackingMe)显示Cookie Set<正确>
- 点击Other Process Service:Log(TrackingMe)显示没有Cookie Set<不正确>
2.杀死应用程序并重新启动应用程序
- 杀死并重新启动应用程序(不要删除应用程序数据)
- 点击Main Process Service:Log(TrackingMe)显示Cookie Set<正确>
- 点击Other Process Service:Log(TrackingMe)显示Cookie Set<正确>
- 点击 Clear Cookie 将所有 Cookie 清空到 CookieManager
- 点击Main Process Service:Log(TrackingMe)显示没有Cookie Set<正确>
- 点击Other Process Service:Log(TrackingMe)显示Cookie Set<不正确>
这一发现
- 其他进程服务不会从 CookieManager 获取更新的 cookie。只能在App被杀死并重启后才能获得。
问题:
- 我们如何让其他进程服务立即从 CookieManager 获取 Cookie?(无需重启App?)
android - Android WebView Cookie 清除问题
我正在通过 WebView 加载 Web 应用程序。我想从移动设备上注销该 Web 应用程序。所以我已经实现了删除所有cookie。并且注销按预期工作,因为如果我们再次尝试打开 WebView,它会导致登录。
但问题是如果我们在注销后重新登录,大多数时候它会显示一个空白屏幕。
我实现的代码如下:
请向我建议一些可能性。
android - Android Webview打开Chrome浏览器接受Cookie
我想在 webview 中显示 Google Page
我已经使用了这些选项
但不是页面打开 Chrome 带有对话框的页面接受 cookie。如何在不显示接受 cookie 窗口的情况下自动强制接受 cookie,或者至少在不可能的情况下确保该窗口在 App 本身中打开?
java - Android中android.webkit.CookieManager的removeAllCookies()方法的作用
我是软件开发的新手(特别是 Android 应用程序开发),并且面临以下两个关于 removeAllCookies() 的查询:
假设网站 A 将其 cookie 存储在我的设备上。我正在编写代码以在我的 WebView 上加载另一个网站,例如网站 B。如果在我的代码中执行 removeAllCookies(null),这是否意味着网站 A 的 cookie 也会被删除?如果是,这不是一个坏习惯吗?如果不是,removeAllCookies 怎么知道哪些 cookie 属于网站 B?
理想情况下,任何 cookie 的键值都应该是网站名称,对吗?
提前致谢!