# 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!