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