Integrar con Flutter
Para integrar el Checkout Pro de Mercado Pago en una aplicación para dispositivos móviles, es necesario mostrar el flujo de pago web dentro de la aplicación. Para esto, utiliza Custom Tabs para Android y Safari View Controller para iOS.
En esta documentación, encontrarás instrucciones detalladas sobre cómo realizar esta integración utilizando Flutter y Custom Tabs. Se presentarán los pasos para instalar las bibliotecas necesarias, configurar las dependencias y se proporcionarán ejemplos prácticos de cómo abrir páginas web usando Custom Tabs.
A continuación, selecciona el sistema operativo y sigue el paso a paso correspondiente.
En esta etapa, instalarás y configurarás las dependencias necesarias para implementar Custom Tabs en tu proyecto desarrollado en Flutter.
Instalar la dependencia Flutter Custom Tabs
Para instalar la dependencia Flutter Custom Tabs, que te permitirá abrir páginas web dentro de una aplicación móvil, ejecuta el siguiente comando en el directorio raíz de tu proyecto:
terminal
$ flutter pub add flutter_custom_tabs
Esto agregará la línea dependencies: flutter_custom_tabs: ^2.4.0
al archivo pubspec.yaml
del paquete. El comando flutter pub get
se ejecutará automáticamente.
Para utilizar Custom Tabs en tu código, importa el paquete en el archivo Dart donde deseas mostrar el checkout:
dart
import 'package:flutter_custom_tabs/flutter_custom_tabs.dart';
Implementar Flutter Custom Tabs
Para implementar Custom Tabs en tu aplicación Flutter, sigue el ejemplo a continuación, que demuestra cómo abrir el checkout de Mercado Pago en un navegador nativo integrado:
dart
import 'package:flutter/material.dart'; import 'package:flutter_custom_tabs/flutter_custom_tabs.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData( primarySwatch: Colors.blue, ), home: Scaffold( body: Center( child: TextButton( child: const Text('Show Flutter homepage'), onPressed: () => _launchURL(context), ), ), ), ); } void _launchURL(BuildContext context) async { final theme = Theme.of(context); try { await launchUrl( Uri.parse('https://flutter.dev'), customTabsOptions: CustomTabsOptions( colorSchemes: CustomTabsColorSchemes.defaults( toolbarColor: theme.colorScheme.surface ), shareState: CustomTabsShareState.on, urlBarHidingEnabled: true, showTitle: true, closeButton: CustomTabsCloseButton( icon: CustomTabsCloseButtonIcons.back ), animations: const CustomTabsAnimations( startEnter: 'slide_up', startExit: 'android:anim/fade_out', endEnter: 'android:anim/fade_in', endExit: 'slide_down', ), ), ); } catch (e) { // Se lanza una excepción si no hay una aplicación de navegador instalada en el dispositivo Android. debugPrint(e.toString()); } } }
Puedes personalizar la apariencia de la pantalla especificando opciones para cada plataforma. Para esto, utiliza la clase de configuración CustomTabsOption, que te permite definir parámetros como colores, animaciones y comportamientos de la pestaña del navegador nativo. Para más detalles, consulta la documentación oficial.
Retorno a la aplicación con Deep Links
Para que el usuario pueda volver a tu aplicación después de completar el pago, necesitarás configurar Deep Links. Esto permite que el usuario sea redirigido automáticamente a una pantalla específica de tu aplicación al finalizar el flujo de pago o al hacer clic en un botón de retorno.
1. Configurar las URLs de retorno en la preferencia de pago
Al crear la preferencia de pago en tu backend, agrega los parámetros back_urls
y auto_return
. Para más información, consulta la documentación sobre cómo Crear y configurar una preferencia de pago.
json
"back_urls": { "success": "tuapp://success", "failure": "tuapp://failure", "pending": "tuapp://pending" }, "auto_return": "approved"
2. Configurar la recepción y gestión de Deep Links en Flutter
Flutter te permite gestionar Deep Links tanto en Android como en iOS. Para esto, utiliza paquetes como uni_links
o go_router
para detectar y gestionar la navegación interna cuando la aplicación es abierta mediante un Deep Link.