DocumentaciĆ³n
Recursos
Certificaciones
Comunidad

Recursos

Revisa las actualizaciones de nuestras soluciones y operatividad del sistema o pide soporte tƩcnico.

Comunidad

Recibe las Ćŗltimas novedades, pide ayuda a otros integradores y comparte tus conocimientos.

Cobros online
Cobros presenciales
Herramientas y recursos
APIs y SDKS
Integrar con React Native CLI - iOS - Mercado Pago Developers

Integrar con React Native CLI

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.

Importante
Antes de comenzar a integrar Checkout Pro para Mobile, deberĆ”s contar con una preferencia creada en tu backend. Si aĆŗn no lo has hecho, ve a CreaciĆ³n de preferencia.

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 InAppBrowser

Client-Side

Con React Native CLI, te sugerimos usar React-Native-InAppBrowser, una dependencia altamente flexible que brinda una soluciĆ³n completa para integrar un navegador web dentro de tu aplicaciĆ³n de React Native. Al considerar el uso de React-Native-InAppBrowser-Reborn se tuvieron en cuenta los siguientes aspectos:

  • Es una dependencia que permite brindar una experiencia de navegaciĆ³n web integrada y fluida dentro de la aplicaciĆ³n.
  • Cuenta con una gran variedad de funciones personalizables para adaptarse a las necesidades especĆ­ficas de la aplicaciĆ³n.
  • Mantiene a los usuarios dentro del contexto de la aplicaciĆ³n, aumentando la retenciĆ³n y la coherencia de la experiencia.

Para instalarla, ejecuta el siguiente comando en tu terminal.

          
npm install react-native-inappbrowser-reborn --save

        
          
yarn add react-native-inappbrowser-reborn

        

Luego, ejecuta el siguiente comando para instalar la dependencia.

plain

cd ios && pod install && cd ..

ImplementaciĆ³n de React-Native-Inappbrowser

Client-Side

Para implementar la dependencia React-Native-Inappbrowser, sigue el ejemplo que mostramos a continuaciĆ³n.

JavaScript

import {
	Button,
	Linking
} from 'react-native';
import InAppBrowser from 'react-native-inappbrowser-reborn';
const ButtonCustomTabs = () => {
		const openUrl = async (url) => {
			if (await InAppBrowser.isAvailable()) {
				InAppBrowser.open(url, {
					// iOS Properties
					dismissButtonStyle: 'cancel',
					preferredBarTintColor: '#453AA4',
					preferredControlTintColor: 'white',
					readerMode: false,
					animated: true,
					modalEnabled: true,
					// Android Properties
					showTitle: true,
					toolbarColor: '#6200EE',
					secondaryToolbarColor: 'black',
					enableUrlBarHiding: true,
					enableDefaultShare: true,
					forceCloseOnRedirection: false, // Animation
					animations: {
						startEnter: 'slide_in_right',
						startExit: 'slide_out_left',
						endEnter: 'slide_in_left',
						endExit: 'slide_out_right',
					},
				});
			} else {
				Linking.openURL(url);
			}
		};
		return ( < Button title = "Press Me"
			onPress = {
				() =>
				openUrl('https://url-to-open.com')
			}
			/> );
		};
		export default ButtonCustomTabs;

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.

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.

Client-Side

Para poder recibir y gestionar el Deep Link, deberĆ”s configurar en tu proyecto de React Native el scheme y path que componen los Deep Links que recibiste para redireccionar a alguna parte de tu aplicaciĆ³n. Para ello, desde Xcode ubĆ­cate en la informaciĆ³n de tu proyecto y agrega una nueva "URL Types".

xcode-paso1

Ingresa el identifier de su aplicaciĆ³n y la URL Schemes del Deep Link.

xcode-paso2

Esto generarĆ” el siguiente cĆ³digo en el archivo ios/appname/Info.plist:

info.plist

<key>CFBundleURLTypes</key>
    <array>
        <dict> <key>CFBundleURLSchemes
            </key>
            <array>
                <string>myapp</string>
                <string>com.test.TestExpoBrowser</string>
            </array>
        </dict> 
    </array>

Agrega el siguiente cĆ³digo al archivo ios/appname/AppDelegate.mm

AppDelegate.mm

// iOS 9.x or newer
#import < React / RCTLinkingManager.h >
	-(BOOL) application: (UIApplication * ) application
openURL: (NSURL * ) url options: (NSDictionary < UIApplicationOpenURLOptionsKey, id > * ) options {
	return [RCTLinkingManager application: application openURL: url options: options];
}

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 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 Safari View Controller.

Uso de react-native-inappbrowser-reborn

Sigue el siguiente ejemplo para cerrar Safari View Controller manualmente utilizando react-native-inappbrowser-reborn.

JavaScript

import {
	useEffect
} from 'react';
import React from 'react';
import MainStack from './navigation/MainStack';
import {
	Linking
} from 'react-native';
import InAppBrowser from 'react-native-inappbrowser-reborn';
import * as RootNavigation from './RootNavigation';

function App(): JSX.Element {
	useEffect(() => {
		Linking.addEventListener('url', event => {
			const {
				url
			} = event;
			if (url !== null && url.includes('myapp://')) {
				InAppBrowser.close();
				RootNavigation.navigate('Congrats');
			}
		});
	}, []);
	return <MainStack / > ;
}
export default App;