Android开发——webview获取H5的Cookie并保存在本地

本文介绍了如何在Android应用中处理WebView的Cookie管理,特别是当WebView在APP退出后重新打开时如何保持H5的登录状态。通过获取H5的Cookie并存储在本地数据库,当再次进入WebView时,若无Cookie则从数据库恢复,确保登录态的延续。代码示例展示了获取和初始化Cookie的过程,使用了lib_annotation数据库框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     最近项目遇到一个新需求,H5的登录态跟APP的登录态分开,所以需要记住H5的登录状态,但是我的webview app已退出再次打开,cookie就被清空(这个找了很久也没会找到原因)。我的解决方法是:获取H5的cookie,保存在本地数据库,·再次进入webview判断是否有Cookie,如果没有,从本地数据库取出Cookie并设置给webview。

     webview管理cookie的机制:将域名和cookie存在数据库中,当webview访问该域下面的网页时就会将该域名相关的cookie带上。所以我们的本地数据库应该将域名和cookie的key做为主键,从H5获取Cookie并解析出键值对存到本地数据库,重新打开webview时如果没有cookie,从本地数据库中取出相应域名的cookie设置给webview。

获取H5cookie并保存的代码如下:

@Override
        public void onPageFinished(WebView view, String url) {
            LogUtil.i(TAG, "onPageFinished:" + url);
            CookieSyncManager.createInstance(mActivity);
            CookieManager cookieManager = CookieManager.getInstance();
            String cookie = cookieManager.getCookie(url);//从H5获取cookie
            LogUtil.i(TAG, "onPageFinished cookie :" + cookie)
### 实现 WebView 与宿主应用之间通信的方式 #### 使用 JavaScript Bridge 进行双向通信 为了使 Web 内容能与宿主应用程序进行交互,一种常见做法是在 WebView 上下文中注入特定 API。这允许 H5 页面通过调用这些预先定义好的函数来触发原生功能[^4]。 对于 Android 平台而言,`addJavascriptInterface()` 方法提供了一种简便途径让 Java 类实例中的公共成员方法暴露给 JavaScript 调用。例如: ```java webView.addJavascriptInterface(new JSBridge(context), "nativeApp"); ``` 这里的 `JSBridge` 是一个自定义类,其中包含了若干可供前端页面调用的方法;而 `"nativeApp"` 则作为桥梁名称,在 HTML 文件里可通过此名字访问该对象下的属性或执行其上的方法[^5]。 另一方面,iOS 开发者可利用 WKWebView 提供的 message handler 来完成相似的任务。具体来说就是注册消息处理器监听来自网页端发出的通知事件。 #### 修改 HTTP 请求头实现自动化认证流程 针对某些场景需求,比如自动填充登录凭证以简化用户体验,可以在 WebView 初始化阶段设置请求拦截机制。这样每当发起网络请求前都会先检查 URL 是否匹配预设模式,据此动态调整 Headers 字段内容,从而达到免密登陆的效果[^3]。 ```csharp // C#代码片段展示如何配置WebView2控件的行为 await webView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync( @"(function() { const originalOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(method, url) { this.addEventListener('load', () => { if (this.responseURL.includes('/login')) { document.cookie = 'auth_token=yourtokenvalue;'; } }); originalOpen.apply(this, arguments); }; })();" ); ``` 以上示例展示了怎样借助 JavaScript 注入技术向目标站点写入 Cookie 数据,进而绕过手动输入账号密码环节直接进入已授权状态。 #### 基于 URL Scheme 或 Custom Protocol Handler 启动外部程序 除了上述两种较为复杂的技术方案外,还有一种更为直观简单的办法——即采用 URL Schemes 方式启动其他 App 或处理内部逻辑跳转。这种方式特别适用于跨平台开发以及轻量级集成场合[^1]。 当点击链接时如果协议部分不是标准 http/https,则会尝试寻找对应的应用来进行解析打开动作。开发者只需按照官方文档说明正确配置即可轻松达成目的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值