# iOS (swift)
## Prerrequisitos
Para poder usar el hosted widget en tu aplicación iOS, 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 Apple.
## Configura deeplinks en tu aplicación iOS
En tu archivo `Info.plist`, agrega el siguiente código:
```xml Ejemplo de Configuración de Deeplink
CFBundleURLTypes
CFBundleURLName
[YOUR IDENTIFIER]
CFBundleURLSchemes
your-url-here
```
## 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.
```swift Webview Handling Example
public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Swift.Void) {
if(navigationAction.navigationType == .other) {
if navigationAction.request.url != nil {
if navigationAction.request.url.host == "success" {
var url = navigationAction.request.url
var link = self.getParameterFrom(url: url, param: "link")
var institution = self.getParameterFrom(url: url, param: "institution")
// Haz algo con el link y la institución.
}
else if navigationAction.request.url.host == "error" {
// Si el redireccionamiento comienza con "error",
// Haz algo con el error.
}
else {
// Si el redireccionamiento comienza con "exit",
// Haz algo con la información de salida.
}
}
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
}
self.webView.configuration.userContentController.add(self, name: "belvoWidget") // Usado para escuchar eventos adicionales
```
## Escuchando eventos adicionales
Nuestro widget para webviews 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 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 el usuario previamente
"institution_name": "", // Nota: Este campo solo aparece DESPUÉS de que han 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 el siguiente protocolo a tu ViewController.
```swift
WKScriptMessageHandler
```
1. Agrega el siguiente método a tu aplicación:
```swift
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
let body = "EVENT DATA: " + (message.body as! String)
print( body as Any )
}
```
1. Agrega la siguiente línea de código al final de tu lógica para manejar enlaces profundos en tu webview:
```kotlin
belvoWebview.configuration.userContentController.add(self, name: "belvoWidget") // Usado para escuchar eventos adicionales
```
¡Hecho! ¡Ahora puedes escuchar eventos adicionales en tu webview!