Deep linking con React Native
Guía básica para aceptar Deep Linking en tu app creada con React Native y react-native-navigation
Esta guía está enfocada en apps creadas con React Native CLI (no Expo). Deep linking permite que tu app se abra desde un enlace externo, por ejemplo cuando un usuario hace clic en un link especial desde un navegador o correo electrónico.
Un caso de uso común es el flujo de autorización de APIs como Uber, donde después de que el usuario autoriza tu app en el navegador, Uber redirige a tu app usando un deep link con el código de autorización.
Paso 1: Configura AppDelegate.m (iOS)
Agrega el siguiente código a tu archivo AppDelegate.m para manejar los deep links:
#import <React/RCTLinkingManager.h>
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
return [RCTLinkingManager application:application openURL:url options:options];
}
- (BOOL)application:(UIApplication *)application
continueUserActivity:(nonnull NSUserActivity *)userActivity
restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
return [RCTLinkingManager application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
}
Paso 2: Configura Info.plist (iOS)
Agrega el URL scheme de tu app en Info.plist. Esto le dice a iOS que tu app puede abrir URLs con el esquema especificado:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
Paso 3: Maneja el deep link en JavaScript
En tu App.js, usa el módulo Linking de React Native para escuchar los deep links:
import { Linking } from 'react-native';
componentDidMount() {
Linking.addEventListener('url', this.handleOpenURL);
Linking.getInitialURL().then((url) => {
if (url) {
this.handleOpenURL({ url });
}
});
}
componentWillUnmount() {
Linking.removeEventListener('url', this.handleOpenURL);
}
handleOpenURL = (event) => {
const url = event.url;
// Parse the URL and navigate accordingly
console.log('Deep link URL:', url);
}