Saltar al contenido principal
Deep Linking

Cómo integrar Universal Links en Next.js con Capacitor

Aprende paso a paso cómo configurar universal links para tu app de Next.js con Capacitor tanto en iOS como en Android.

Cómo integrar Universal Links en Next.js con Capacitor Capgo

Los Universal Links en iOS y los App Links en Android permiten llevar al usuario directamente a tu app desde un enlace, saltándose el navegador. Esto es clave para mejorar la UX y mantener el contexto de la web a la app. En esta guía, veremos cómo configurar estos deep links para una app de Next.js usando Capacitor. Para atribución y deferred deep links, @capgo/capacitor-appsflyer puede dirigir las campañas instaladas a la pantalla correcta dentro de la app.

Configurar deep links no requiere mucho code, pero sí algo de configuración. Al terminar esta guía, podrás hacer clic en un enlace como https://www.capgo.app/details/22 y que tu app se abra en la página correcta si ya está instalada.

Primero, crearemos una nueva app de Next.js y una página de detalles para las pruebas:

npx create-next-app@latest capgoLinks
cd capgoLinks
mkdir pages/details
touch pages/details/[id].js
npm run build
npx cap add ios
npx cap add android

Asegúrate de que tu bundle ID esté configurado correctamente en el archivo archivo capacitor.config.json , ya que es crucial para la configuración:

{
  "appId": "com.capgo.deeplinks",
  "appName": "capgoLinks",
  "webDir": "out",
  "bundledWebRuntime": false
}

Para el enrutamiento, Next.js usa file-based routing, así que al crear un archivo en pages/details/[id].js, ya habremos configurado nuestra ruta wildcard.

En pages/details/[id].js, podemos obtener el ID de la URL usando el router nativo de Next.js:

import { useRouter } from 'next/router'

function DetailsPage() {
  const router = useRouter()
  const { id } = router.query

  return (
    <div>
      <p>My ID: {id}</p>
    </div>
  )
}

export default DetailsPage

Ahora, gestionemos el appUrlOpen evento con Capacitor. Este evento se dispara cuando se abre la app mediante un custom URL scheme. Añade un listener en el pages/_app.js archivo:

import { useEffect } from 'react'
import { App } from '@capacitor/app'

function MyApp({ Component, pageProps }) {
  useEffect(() => {
    App.addListener('appUrlOpen', (event) => {
      const slug = event.url.split('.app').pop()
      if (slug)
        window.location.href = slug

    })
  }, [])

  return <Component {...pageProps} />
}

export default MyApp

Este code escucha el appUrlOpen evento y navega a la ruta correspondiente en tu app de Next.js.

Configuración de iOS

Para iOS, necesitarás un app ID con Associated Domains habilitado. Crea un apple-app-site-association archivo con el siguiente contenido, reemplazando YOURTEAMID y com.your.bundleid con tu team ID y bundle ID reales:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "YOURTEAMID.com.your.bundleid",
        "paths": ["*"]
      }
    ]
  }
}

Sube este archivo a .well-known directorio en tu dominio, haciéndolo accesible en https://www.capgo.app/.well-known/apple-app-site-association.

En Xcode, añade el dominio a los entitlements de tu app usando el formato applinks:capgo.app.

Configuración de Android

Para Android App Links, sigue estos pasos:

  1. Genera un archivo keystore si no tienes uno.
  2. Obtén la huella digital SHA256 del keystore.
  3. Crea un assetlinks.json archivo con tu nombre de paquete y la huella SHA256.
  4. Sube este archivo al .well-known directorio de tu dominio.

En tu AndroidManifest.xml, añade un intent-filter al activity elemento que gestione deep links:

<activity ...>
  <intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="https" android:host="capgo.app" />
  </intent-filter>
</activity>

After uploading the assetlinks.json archivo, puedes verificarlo con la herramienta Digital Asset Links de Google. Si todo está bien configurado, verás un check verde.

Para hacer el build y firmar tu app, usa estos comandos:

cd android
./gradlew assembleRelease
cd ..
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore android/app/build/outputs/apk/release/app-release-unsigned.apk alias_name
zipalign -v 4 android/app/build/outputs/apk/release/app-release-unsigned.apk capgo.apk
adb install capgo.apk

Esto instalará la app firmada en tu dispositivo Android conectado.

Capacitor Configuración de Native Project Settings

Para automatizar la configuración del proyecto nativo, considera usar el Capacitor paquete de configuración. Instálalo en tu proyecto:

npm install @capacitor/configure

Crea un capacitor.config.yaml archivo en la raíz de tu proyecto:

vars:
  BUNDLE_ID: com.capgo.deeplinks
  PACKAGE_NAME: com.capgo.deeplinks
platforms:
  ios:
    targets:
      App:
        bundleId: $BUNDLE_ID
    entitlements:
      - com.apple.developer.associated-domains: ['applinks:capgo.app']
  android:
    packageName: $PACKAGE_NAME

Ejecuta la herramienta de configuración con esta config:

npx cap-config run capacitor.config.yaml

Esto aplicará los ajustes especificados en el archivo YAML a tus proyectos nativos.

Conclusión

Configurar deep links con Capacitor en una app de Next.js requiere configurar tu dominio y los ajustes del proyecto tanto para iOS como para Android. Aunque el proceso requiere atención al detalle, es más ágil que los métodos antiguos y no necesita plugins adicionales. Asegúrate de que los archivos de verificación de dominio se sirvan correctamente y verifícalos con las herramientas de cada plataforma. Una vez configurado, tu app se abrirá sin problemas desde enlaces web, ofreciendo una transición fluida para tus usuarios de la web a la app.

Si estás usando Cómo integrar Universal Links en Next.js con Capacitor para planificar el trabajo con plugins nativos, conéctalo con Directorio de plugins de Capgo para el flujo de trabajo del producto en Capgo Plugin Directory, Plugins de Capacitor por Capgo para el detalle de implementación en los Plugins de Capacitor por Capgo, Añadir o actualizar plugins para el detalle de implementación en Agregar o actualizar plugins, Alternativas a plugins de Ionic Enterprise para el flujo de trabajo en Alternativas a plugins de Ionic Enterprise, y Native Builds de Capgo para el flujo de trabajo del producto en Capgo Native Builds.

Live updates para apps Capacitor

Cuando un bug de la capa web está en producción, publica el fix a través de Capgo en lugar de esperar días a la aprobación de la app store. Los usuarios reciben la actualización en segundo plano mientras los cambios nativos siguen el flujo de revisión habitual.

Lo último de nuestro blog

Capgo te da la información clave que necesitas para crear una app móvil realmente profesional.