Skip to content
Última actualización

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:

Ejemplo de Configuración de Enlace Profundo
<manifest ...>
<application ...>
    <activity ...>
			<intent-filter> <!-- Necesitas agregar este objeto XML completo. -->
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
				<data
          android:scheme="your-url-here"
          android:host="" /> 
      </intent-filter>
    </activity>
  </application>
</manifest>

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.

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:

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
    }
}

Para escuchar estos eventos:

  1. Agrega la siguiente clase a tu aplicación.
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:
belvoWebView.addJavascriptInterface(BelvoWidget(), "belvoWidget") // Usado para escuchar eventos adicionales
  1. [Opcional] Agrega la siguiente anotación donde sea necesario para suprimir cualquier advertencia:
@SuppressLint("JavascriptInterface")

¡Hecho! ¡Ahora puedes escuchar eventos adicionales en tu webview!