kotlin安卓开发JetPack Compose 如何使用webview 打开网页时给webview注入cookie

简介: 在Jetpack Compose中使用WebView需借助AndroidView。要注入Cookie,首先在`build.gradle`添加WebView依赖,如`androidx.webkit:webkit:1.4.0`。接着创建自定义`ComposableWebView`,通过`CookieManager`设置接受第三方Cookie并注入Cookie字符串。最后在Compose界面使用这个自定义组件加载URL。注意Android 9及以上版本可能需要在网络安全配置中允许第三方Cookie。


在Android应用程序中经常会加载一个webView页,如果需要客户端向WebView传递信息,比如Cookie,也是可以的。

需要应用程序先将Cookie注入进去,打开该网页时,WebView会将加载的url通过http请求传输到服务器。同时,在这次请求中,会将Cookie信息通过http header传递过去。

流程如下:

1、客户端通过以下代码设置cookie

fun setCookie(context: Context, url: String, map: MutableMap<String, String>) {
    map.onEach { entry ->
        Log.i("xudong debug", "set cookie: key: ${entry.key},  value: ${entry.value}")
        CookieSyncManager.createInstance(context)
        val cookieManager = CookieManager.getInstance()
        cookieManager.setCookie(url, "${entry.key}=${entry.value}")
        CookieSyncManager.getInstance().sync()
    }
}



在Jetpack Compose中,由于没有直接的WebView组件,你需要使用AndroidView来包裹传统的WebView控件。要在打开网页时给WebView注入Cookie,可以通过如下步骤实现:

步骤 1: 引入WebView依赖

确保你的build.gradle文件中添加了WebView的依赖项:


dependencies {
    implementation 'androidx.webkit:webkit:1.4.0'
}





步骤 2: 创建自定义WebView组件

创建一个自定义的WebView组件,该组件会注入Cookie后再加载URL。



import android.webkit.CookieManager
import android.webkit.WebView
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.viewinterop.AndroidView





@Composable
fun ComposableWebView(url: String, modifier: Modifier = Modifier) {
    val context = LocalContext.current

    AndroidView(factory = {
        WebView(context).apply {
            // 设置WebView的属性,如是否支持JavaScript等
            settings.javaScriptEnabled = true

            // 注入Cookie逻辑
            CookieManager.getInstance().apply {
                setAcceptThirdPartyCookies(this@apply, true)
                CookieManager.getInstance().setCookie(url, "YOUR_COOKIE_STRING")
                // 注意:YOUR_COOKIE_STRING应该是格式正确的Cookie字符串,例如 "key=value; domain=.example.com; path=/"
                reload() // 重新加载网页以应用Cookie
            }

            // 加载URL
            loadUrl(url)
        }
    }, modifier = modifier.fillMaxSize())
}



步骤 3: 使用自定义WebView组件

在你的Compose界面中使用这个ComposableWebView组件:



import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.layout.Column
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.platform.setContent
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyApp()
        }
    }
}

@Composable
fun MyApp() {
    Column {
        Text("点击按钮打开WebView")
        Button(onClick = {
            // 在这里可以使用实际的URL和Cookie
            ComposableWebView("https://www.example.com")
        }) {
            Text("打开WebView")
        }
    }
}

// 为了预览,我们通常不直接预览Web内容,因此这里不做预览参数提供
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    MyApp()
}



请注意,注入Cookie的操作需要在加载URL之前完成,并且确保你有权限访问和修改Cookie。此外,由于安全原因,从Android 9(API 级别 28)开始,需要在应用的网络安全配置中明确允许第三方Cookie。如果你的应用面向的是Android 9及以上版本,还需检查AndroidManifest.xml中是否正确配置了网络安全配置。




相关文章
|
2月前
|
程序员 开发工具 Android开发
Android|WebView 禁止长按,限制非白名单域名的跳转层级
如何限制 WebView 仅域名白名单网址能随意跳转,并禁用长按选择文字。
44 2
|
2月前
|
JavaScript Java Kotlin
Kotlin开发笔记 - 常量与变量
Kotlin开发笔记 - 常量与变量
35 2
|
2月前
|
JavaScript Java Kotlin
|
2月前
|
IDE 开发工具 Kotlin
Kotlin开发笔记 - 参数与异常
本教程详细讲解Kotlin语法,适合深入学习。若需快速掌握,可参考“简洁”系列教程。内容涵盖具名参数、变长参数、默认参数、多返回值及异常处理等核心概念,助你高效编程。
23 1
|
2月前
|
Java 开发者 Kotlin
Kotlin开发笔记- 分支与循环
本系列教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。若需快速学习Kotlin,可参考“简洁”系列教程。本文重点介绍了Kotlin中的分支语句(if...else 和 when)及循环语句(for 和 while),并提供了丰富的示例代码,帮助读者掌握这些核心语法。
29 1
|
2月前
|
Kotlin
|
2月前
|
Java Kotlin 索引
Kotlin开发笔记- 分支与循环
Kotlin开发笔记- 分支与循环
45 0
|
3月前
|
监控 安全 Java
Kotlin 在公司上网监控中的安卓开发应用
在数字化办公环境中,公司对员工上网行为的监控日益重要。Kotlin 作为一种基于 JVM 的编程语言,具备简洁、安全、高效的特性,已成为安卓开发的首选语言之一。通过网络请求拦截,Kotlin 可实现网址监控、访问时间记录等功能,满足公司上网监控需求。其简洁性有助于快速构建强大的监控应用,并便于后续维护与扩展。因此,Kotlin 在安卓上网监控应用开发中展现出广阔前景。
30 1
|
7月前
|
存储 安全 Android开发
构建高效的Android应用:Kotlin与Jetpack的结合
【5月更文挑战第31天】 在移动开发的世界中,Android 平台因其开放性和广泛的用户基础而备受开发者青睐。随着技术的进步和用户需求的不断升级,开发一个高效、流畅且易于维护的 Android 应用变得愈发重要。本文将探讨如何通过结合现代编程语言 Kotlin 和 Android Jetpack 组件来提升 Android 应用的性能和可维护性。我们将深入分析 Kotlin 语言的优势,探索 Jetpack 组件的核心功能,并通过实例演示如何在实际项目中应用这些技术。
|
6月前
|
数据管理 API 数据库
探索Android Jetpack:现代安卓开发的利器
Android Jetpack是谷歌为简化和优化安卓应用开发而推出的一套高级组件库。本文深入探讨了Jetpack的主要构成及其在应用开发中的实际运用,展示了如何通过使用这些工具来提升开发效率和应用性能。

相关实验场景

更多