# Android (Kotlin) ## Requisitos previos Para poder usar el hosted widget en tu aplicación Android, asegúrate de que: - Puedes crear tokens de `access` en tu servidor. - Sabes cómo implementar webviews para tu plataforma. Para más información, consulta los artículos sobre webview de Google. ## Configura enlaces profundos en tu aplicación Android En tu archivo `AndroidManifest.xml`, agrega el siguiente código: ```xml Ejemplo de Configuración de Enlace Profundo ``` ## Manejar eventos en tu webview En el siguiente ejemplo de código puedes ver un ejemplo de cómo escuchar y manejar eventos dentro de tu webview. ```kotlin Ejemplo de Manejo de Webview val belvoWebView: WebView = findViewById(R.id. WEBVIEW_ID_ASSIGNED_IN_CONTENT ) belvoWebView.loadUrl("https://widget.belvo.io/?access_token={access_token_from_backend}") belvoWebView.settings.javaScriptEnabled = true belvoWebView.settings.allowContentAccess = true belvoWebView.settings.setDomStorageEnabled(true) belvoWebView.settings.useWideViewPort = true belvoWebView.webViewClient = object : WebViewClient () { override fun shouldOverrideUrlLoading(view: WebView?, url: String): Boolean { view?.loadUrl(url) if (url.startsWith("https")) { return true } else { belvoWebView.stopLoading() val uri: Uri = Uri.parse(url) val host: String? = uri.host if (host == "success") { val link : String? = uri.getQueryParameter("link") val institution : String? = uri.getQueryParameter("institution") // Haz algo con el link y la institución. } else if (host == "exit") { // Si el redireccionamiento comienza con "exit", // Haz algo con los datos. } else { // Si el redireccionamiento comienza con "error", // Haz algo con los datos. } belvoWebView.goBack() } return false } } belvoWebView.addJavascriptInterface(BelvoWidget(), "your-url-here") // Usado para escuchar eventos adicionales ``` Por favor ten en cuenta: Podrías recibir una advertencia debido a la línea `belvoWebView.settings.javaScriptEnabled = true` (como en la imagen de abajo). El Widget de Belvo para Webviews cumple con todo tipo de mitigaciones XSS, por lo que recomendamos suprimir esta advertencia con la anotación sugerida por Android Studio. ## Escuchando eventos adicionales Nuestro hosted widget también envía datos adicionales sobre los eventos que el usuario encuentra a lo largo del widget. Por ejemplo, cuando el usuario pasa de la pantalla de selección de institución a la pantalla de inicio de sesión de credenciales, nuestro widget enviará un evento. Los eventos se envían como cargas útiles de cadena JSON con el siguiente esquema: Evento de Carga de Página ```json PAGE_LOAD Event { "eventName": "PAGE_LOAD", "metadata":{ "page": "/institutions", // Página a la que se dirige el usuario "from": "/consent", // Página donde estaba previamente el usuario "institution_name": "", // Nota: Este campo solo aparece DESPUÉS de que hayan seleccionado una institución } } ``` Evento de Error ```json ERROR Event { "eventName": "ERROR", "request_id": "UUID", "meta_data": { "error_code": "login_error", "error_message": "Invalid credentials provided to login to the institution", "institution_name": "bancoazteca_mx_retail", "timestamp": "2020-04-27T19:09:23.918Z" } } ``` Para escuchar estos eventos: 1. Agrega la siguiente clase a tu aplicación. ```kotlin class BelvoWidget() { @JavascriptInterface fun sendMessage(data:String) { println( "Event data: $data" ) } } ``` 1. Agrega la siguiente línea de código al final de tu lógica para manejar enlaces profundos en tu webview: ```kotlin belvoWebView.addJavascriptInterface(BelvoWidget(), "belvoWidget") // Usado para escuchar eventos adicionales ``` 1. [Opcional] Agrega la siguiente anotación donde sea necesario para suprimir cualquier advertencia: ```kotlin @SuppressLint("JavascriptInterface") ``` ¡Hecho! ¡Ahora puedes escuchar eventos adicionales en tu webview!