# React Native ## Pré-requisitos Para poder usar o hosted widget no seu aplicativo React Native, 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 na página do github do React Native. ## 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. ```javascript Exemplo de Manipulação de Webview import React, {useState, useEffect} from 'react'; import {WebView} from 'react-native-webview'; import {URL} from 'react-native-url-polyfill'; export default function BelvoWidget({token, payload}) { const [belvoURI, setBelvoURI] = useState(''); let belvoWidgetURL = `https://widget.belvo.io/?access_token=${token}`; useEffect(() => { setBelvoURI(`${belvoWidgetURL}&${buildPayload(payload)}`); }, [belvoWidgetURL, payload]); const buildPayload = rawPayload => { return Object.keys(rawPayload) .map(key => key + '=' + rawPayload[key]) .join('&'); }; const handleBelvoEvent = event => { console.log({event}); const webviewEvent = new URL(event.url); if (webviewEvent.protocol === 'your-url-here:') { const parseParams = Object.fromEntries(webviewEvent.searchParams); switch (webviewEvent.hostname) { case 'success': const {link, institution} = parseParams; // Faça algo com o link e a instituição. return false; case 'exit': // Se o redirecionamento começar com "exit", // Faça algo com os dados. return false; case 'error': const {error, error_message} = parseParams; // Se o redirecionamento começar com "error", // Faça algo com os dados do erro. return false; } return false; } return true; }; // Insira o código para escutar eventos adicionais aqui return ( ); ``` ## 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, basta adicionar o seguinte código à sua aplicação: ```js { // faça algo com event.nativeEvent.data }} /> ``` Pronto! Agora você pode ouvir eventos adicionais na sua webview!