Многоплатформенность Kotlin: как извлечь значение JSON, загруженное в WebView?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Многоплатформенность Kotlin: как извлечь значение JSON, загруженное в WebView?

Сообщение Anonymous »

Я загружаю 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»