Integrar con React Native Expo Go
En el desarrollo de aplicaciones mĂłviles con React Native, a menudo surge la necesidad de mostrar contenido web dentro de la aplicaciĂłn. Para lograr esto, existen varias opciones, entre las cuales se destacan el uso de Custom Tabs (para Android) y Safari View Controller (para iOS). Estas tecnologĂas permiten abrir pĂĄginas web en un navegador nativo integrado en la aplicaciĂłn, brindando una experiencia de navegaciĂłn mĂĄs fluida y coherente para los usuarios.
En este paso vamos a instalar y configurar las dependencias necesarias para implementar Safari View Controller en tu proyecto desarrollado en React Native.
Uso de Expo-Web-Browser
Client-Side
Esta dependencia provee el acceso al navegador, en este caso Safari View Controller para iOS. También realiza el manejo del redireccionamiento.
Para instalarla, ejecuta el siguiente comando en tu terminal
yarn
yarn add expo-web-browser
ImplementaciĂłn de Expo-Web-Browser
Client-Side
Para implementar la dependencia Expo-Web-Browser, sigue el ejemplo que mostramos a continuaciĂłn.
JavaScript
import {
StatusBar
} from "expo-status-bar";
import {
StyleSheet,
Button,
View
} from "react-native";
import {
openBrowserAsync
} from "expo-web-browser";
export default function ExpoWebBrowserExample(url) {
return ( <
View style = {
styles.container
} > < Button title = "Open Browser"
onPress = {
() => openBrowserAsync('https://url-to-open.com')
}
/> <StatusBar style="auto" / >
<
/View> );
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
});
CĂłmo volver a tu App
Client-Side
Los Deep Links, tambiĂ©n conocidos como enlaces profundos, son una forma poderosa de permitir la navegaciĂłn directa a pantallas o secciones especĂficas de una aplicaciĂłn mĂłvil.
Crear un Deep Link
Desde nuestro checkout es posible configurar Deep Links para volver a tu aplicaciĂłn, ya sea haciendo click en un link de âVolverâ, o de forma automĂĄtica al terminar todo un flujo de pago exitoso, para luego ser redirigido a tu App.
Para esto, debemos agregar en la creaciĂłn de la preferencia de pago las propiedades back_urls
y auto_return
, segĂșn corresponda.
Para conocer mĂĄs, puedes acceder a la documentaciĂłn de URLs de retorno.
ConfiguraciĂłn de la aplicaciĂłn para la gestiĂłn del Deep Link
Client-Side
Para poder recibir y gestionar el Deep Link es necesario configurar en nuestro proyecto de React Native el scheme y path que componen los Deep Links que recibimos para redireccionar a alguna parte de tu aplicaciĂłn. Para ello, verifica que tu archivo app.json contenga el nombre del scheme:
app.json
"expo": {
"scheme": "myapp"
}
Al ejecutar npx expo prebuild
su archivo ios/appname/Info.plist
deberĂa contener algo similar al siguiente cĂłdigo.
info.plist
<key>CFBundleURLTypes</key>
<array>
<dict> <key>CFBundleURLSchemes
</key>
<array>
<string>myapp</string>
<string>com.test.TestExpoBrowser</string>
</array>
</dict>
</array>
RecepciĂłn y gestiĂłn del Deep Link
Client-Side
Por Ășltimo, veremos cĂłmo podemos configurar nuestra aplicaciĂłn de React Native para recibir y gestionar los Deep Links. Esto se abordarĂĄ usando la dependencia react-native-inappbrowser.
En el caso de iOS es necesario cerrar la Safari View Controller de manera manual. Para esto, deberås escuchar el evento de cuando cambia la url desde el componente que abre la ventana o el punto de entrada de la aplicación, y luego llamar el método para cerrar la Safari View Controller.
Uso de Expo-Web-Browser
Sigue el ejemplo a continuaciĂłn para cerrar manualmente Safari View Controller usando Expo-Web-Browser.
JavaScript
import {
StatusBar
} from "expo-status-bar";
import {
StyleSheet,
Button,
View,
Linking,
Platform
} from "react-native";
import {
openBrowserAsync
} from "expo-web-browser";
import * as WebBrowser from "expo-web-browser";
import {
useEffect
} from "react";
export default function App() {
useEffect(() => {
Linking.addEventListener("url", (event) => {
const {
url
} = event;
if (url !== null && url.includes("myapp://")) {
Platform.OS === "ios" && WebBrowser.dismissBrowser();
}
});
}, []);
const url = "https://url-to-open.com";
return ( <
View style = {
styles.container
} >
<
Button title = "Open Browser"
onPress = {
() => openBrowserAsync(url)
}
/> <
StatusBar style = "auto" / > < /View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
});