Agrega filtros de intents para vínculos de apps

Los App Links son vínculos directos que usan el esquema HTTP o HTTPS y que Android verifica como asociados a tu sitio web. Para registrarte y controlar los vínculos de la app, sigue estos pasos:

  1. Agrega uno o más filtros de intents al manifiesto de tu app que especifiquen el dominio o las URLs de tu sitio web.
  2. Agrega autoVerify="true"attribute a los elementos del filtro de intents. Esto indica al sistema que debe intentar verificar el esquema y los dominios de host en relación con la configuración de assetlinks.json de tu sitio web.
  3. Declara asociaciones de sitios web.

A continuación, se muestra un ejemplo de una declaración de vínculo de aplicación con esquemas y hosts, así como autoVerify="true":

<activity
    android:name=".MainActivity"
    android:exported="true"
    ...>
    <!-- Make sure you explicitly set android:autoVerify to "true". -->
    <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" />

        <!-- If a user clicks on a link that uses the "http" scheme, your
             app should be able to delegate that traffic to "https". -->
        <!-- Do not include other schemes, as this will prevent verification. -->
        <data android:scheme="http" />
        <data android:scheme="https" />

        <!-- Include one or more domains that should be verified. -->
        <data android:host="www.example.com" />
        <data android:host="*.example.com" />
    </intent-filter>
</activity>

Puntos clave sobre el código

  • AutoVerify: El atributo "android:autoVerify="true" es obligatorio para los App Links. Le indica al sistema que debe intentar verificar la asociación entre tu app y los esquemas y dominios especificados en las etiquetas <data>. Se recomienda agregar autoVerify="true" a cada filtro de intents que desees que se pueda verificar.
  • Elementos de datos: Cada filtro de intents de vínculos en la app debe incluir uno o más elementos <data> que especifiquen los esquemas y los formatos de host que coincidan con el dominio de tu sitio web verificable.
  • Esquemas: El filtro de intents debe incluir elementos <data> para los esquemas http y https.
  • Hosts: De forma opcional, puedes agregar elementos <data> para que coincidan con uno o más hosts. Usa un comodín (*) para que coincidan varios subdominios (como *.example.com). El sistema intentará verificar cada host con tu archivo assetlinks.json en tu sitio web. Ten en cuenta que el archivo assetlinks.json debe controlar cualquier enrutamiento a nivel de la ruta de acceso (consulta la sección de prácticas recomendadas a continuación).

  • Varios hosts: Si declaras varios dominios de host, el sistema (en Android 12 y versiones posteriores) intentará verificar cada uno de ellos. Si se verifica algún host, la app se convierte en el controlador predeterminado para los vínculos de ese host verificado. En Android 11 y versiones anteriores, la verificación falla si no se puede verificar al menos un host.

  • Varios filtros de intents: Es importante crear filtros separados cuando tu intención es declarar URLs únicas (como una combinación específica de esquema y host), ya que se fusionan varios elementos <data> en el mismo filtro de intents para representar todas las variaciones de sus atributos combinados.

Consideraciones para las reglas de filtro de manifiesto

Si configuras filtros para usarlos con App Links dinámicos en Android 15 y versiones posteriores, es importante recordar que las reglas dinámicas declaradas en el archivo assetlinks.json del servidor no pueden expandir el alcance de las reglas de URL que declaras de forma estática en el manifiesto de tu app.

Por este motivo, te recomendamos que uses este enfoque:

  • En el manifiesto de tu app, establece el alcance más amplio posible, por ejemplo, declarando solo el esquema y el dominio.
  • Confía en las reglas de assetlinks.json del servidor para realizar ajustes adicionales, como el enrutamiento a nivel de la ruta de acceso.

Con esta configuración ideal, podrás agregar de forma dinámica nuevas rutas de vínculos de la app en el archivo assetlinks.json según sea necesario, sabiendo que se ajustarán al amplio alcance que estableciste en el manifiesto de la app.

Admite vínculos de apps para varios hosts

El sistema debe poder verificar el host especificado en los elementos de datos de los filtros de intents de URL de la app en comparación con los archivos de Vínculos de recursos digitales alojados en los dominios web respectivos en ese filtro de intents. Si la verificación falla, el sistema adopta su comportamiento estándar de forma predeterminada para resolver el intent, como se describe en Cómo crear vínculos directos al contenido de la app. Sin embargo, la app se puede verificar como controlador predeterminado para cualquiera de los patrones de URL definidos en los otros filtros de intents de la app.

Por ejemplo, una app con los siguientes filtros de intents pasará la verificación solo para https://www.example.com si se encuentra un archivo assetlinks.json en https://www.example.com/.well-known/assetlinks.json, pero no en https://www.example.net/.well-known/assetlinks.json:

<application>

  <activity android:name=”MainActivity”>
    <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="http" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
    </intent-filter>
  </activity>
  <activity android:name="SecondActivity">
    <intent-filter>
      <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" />
     <data android:host="www.example.net" />
    </intent-filter>
  </activity>

</application>

Admite vínculos de apps para varios subdominios

El protocolo de Vínculos de recursos digitales trata los subdominios de tus filtros de intents como hosts independientes y únicos. Por lo tanto, si tu filtro de intents enumera varios hosts con subdominios diferentes, debes publicar un assetlinks.json válido en cada dominio. Por ejemplo, el siguiente filtro de intents incluye www.example.com y mobile.example.com como hosts de URL de intents aceptados. Por lo tanto, un assetlinks.json válido debe publicarse en https://www.example.com/.well-known/assetlinks.json y https://mobile.example.com/.well-known/assetlinks.json.

<application>
  <activity android:name="MainActivity">
    <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" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
      <data android:host="mobile.example.com" />
    </intent-filter>
  </activity>
</application>

Como alternativa, si declaras tu nombre de host con un comodín (como *.example.com), debes publicar tu archivo assetlinks.json en el nombre de host raíz (example.com). Por ejemplo, una app con el siguiente filtro de intents pasará la verificación de cualquier subnombre de example.com (como foo.example.com) siempre que se publique el archivo assetlinks.json en https://example.com/.well-known/assetlinks.json:

<application>
  <activity android:name="MainActivity">
    <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" />
      <data android:host="*.example.com" />
    </intent-filter>
  </activity>
</application>

Cómo verificar si hay varias apps asociadas al mismo dominio

Si publicas varias apps asociadas con el mismo dominio, cada una puede verificarse de manera correcta. Sin embargo, si las apps pueden resolver exactamente el mismo host del dominio y la misma ruta de acceso, como puede suceder con las versiones básica y completa de una app, solo la última que se instaló puede resolver intents web para ese dominio.

En un caso como este, verifica si es posible que, en el dispositivo del usuario, existan apps en conflicto, siempre que cuentes con la visibilidad del paquete necesaria. Luego, en la app, muestra un diálogo personalizado del selector que incluya los resultados de las llamadas a queryIntentActivities. El usuario puede seleccionar su app preferida de la lista de apps que coinciden y aparecen en el diálogo.

.