# iOS (swift) ## Pré-requisitos Para poder usar o hosted widget no seu aplicativo iOS, certifique-se de que você: - Pode criar tokens de `access` no seu servidor. - Sabe como implementar webviews para sua plataforma. Para mais informações, consulte os artigos sobre webview da Apple. ## Configure deeplinks no seu aplicativo iOS No seu arquivo `Info.plist`, adicione o seguinte código: ```xml Exemplo de Configuração de Deeplink CFBundleURLTypes CFBundleURLName [YOUR IDENTIFIER] CFBundleURLSchemes your-url-here ``` ## Manipular eventos na sua webview No exemplo de código abaixo, você pode ver um exemplo de como escutar e manipular eventos dentro da sua webview. ```swift Exemplo de Manipulação de Webview 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") // Faça algo com o link e a instituição. } else if navigationAction.request.url.host == "error" { // Se o redirecionamento começar com "error", // Faça algo com o erro. } else { // Se o redirecionamento começar com "exit", // Faça algo com a informação de saída. } } decisionHandler(.cancel) return } decisionHandler(.allow) } self.webView.configuration.userContentController.add(self, name: "belvoWidget") // Usado para escutar eventos adicionais ``` ## Ouvindo eventos adicionais Nosso widget para webviews também envia dados adicionais sobre eventos que o usuário encontra ao longo do widget. Por exemplo, quando o usuário vai da tela de seleção de instituição para a tela de login de credenciais, nosso widget enviará um evento. Os eventos são enviados como payloads JSON com o seguinte esquema: Evento de Carregamento de Página ```json PAGE_LOAD Event { "eventName": "PAGE_LOAD", "metadata":{ "page": "/institutions", // Página para a qual o usuário é direcionado "from": "/consent", // Página onde o usuário estava anteriormente "institution_name": "", // Nota: Este campo só aparece DEPOIS que eles selecionaram uma instituição } } ``` Evento de Erro ```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 ouvir esses eventos: 1. Adicione o seguinte protocolo ao seu ViewController. ```swift WKScriptMessageHandler ``` 1. Adicione o seguinte método à sua aplicação: ```swift func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { let body = "EVENT DATA: " + (message.body as! String) print( body as Any ) } ``` 1. Adicione a seguinte linha de código ao final da sua lógica para manipular deep links no seu webview: ```kotlin belvoWebview.configuration.userContentController.add(self, name: "belvoWidget") // Usado para ouvir eventos adicionais ``` Feito! Agora você pode ouvir eventos adicionais no seu webview!