Я загружаю URL-адрес аутентификации Google SAML для аутентификации пользователя с помощью WebView. Когда пользователь успешно входит в систему, вводя свои учетные данные, я получаю этот ответ JSON в WebView:
{
"status": 1,
"msg": "user Authenticated !!",
"user": {
"userFirstName": "John",
"userLastName": "Doe",
"userEmail": "[email protected]",
"userType": "manager",
"manager": true,
"employee": false,
"teamLead": false
},
"token": "eyJhbGciOiJI................."
}
Я хочу извлечь эту информацию из WebView и сохранить ее локально.
Чтобы реализовать WebView в мультиплатформе Kotlin, я я использую эту библиотеку:
Сообщение на среднем уровне: https://medium.com/@kevinnzou/web-every ... 9b1264b370
Репозиторий GitHub: https ://github.com/KevinnZou/compose-webview-multiplatform
Реализация WebView:
@Composable
internal fun LoginWebView(navHostController: NavHostController? = null) {
val state = rememberWebViewState(url = SAML_DEV)
val navigator = rememberWebViewNavigator()
val jsBridge = rememberWebViewJsBridge()
jsBridge.register(LoginMessageHandler())
state.webSettings.apply {
isJavaScriptEnabled = true
}
DisposableEffect(Unit) {
state.webSettings.apply {
logSeverity = KLogSeverity.Debug
}
onDispose { }
}
MaterialTheme {
Column {
TopAppBar(
title = { Text(text = "Login") },
navigationIcon = {
IconButton(onClick = {
if (navigator.canGoBack) {
navigator.navigateBack()
} else {
navHostController?.popBackStack()
}
}) {
Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = "Back",
)
}
},
)
val loadingState = state.loadingState
if (loadingState is LoadingState.Loading) {
LinearProgressIndicator(
color = MaterialTheme.colorScheme.onPrimary,
modifier = Modifier
.height(6.dp)
.fillMaxWidth(),
)
}
WebView(
state = state,
modifier = Modifier.fillMaxSize(),
navigator = navigator,
webViewJsBridge = jsBridge,
)
}
}
}
class LoginMessageHandler : IJsMessageHandler {
override fun handle(
message: JsMessage,
navigator: WebViewNavigator?,
callback: (String) -> Unit
) {
println("LoginMessageHandler handle: $message")
Logger.i {
"Greet Handler Get Message: $message"
}
//val param = processParams(message)
callback(message.params)
}
override fun methodName(): String {
return "login"
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... he-webview
Многоплатформенность Kotlin: как извлечь значение JSON, загруженное в WebView? ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Многоплатформенность Kotlin: как извлечь значение JSON, загруженное в WebView?
Anonymous » » в форуме Android - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Многоплатформенность Kotlin: как извлечь значение JSON, загруженное в WebView?
Anonymous » » в форуме Android - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-