Cuando un vínculo al que se le hace clic o una solicitud programática invocan un intent de URI web, el sistema Android prueba cada una de las siguientes acciones, en orden secuencial, hasta que la solicitud tenga éxito:
- Abre la app preferida del usuario que puede manejar el URI, si se designa uno.
- Abre la única app disponible que puede manejar el URI.
- Permite al usuario seleccionar una app desde un diálogo.
Sigue los pasos que aparecen a continuación para crear vínculos a tu contenido y probarlos. También puedes usar el Asistente de vínculos de apps en Android Studio para agregar Android App Links.
Nota: A partir de Android 12 (nivel de API 31), se trata de un formato el intent web se resuelve en una actividad de tu aplicación solo si esta se aprueba para el dominio específico contenido en ese intent web. Si tu app no se aprueba para el dominio, el intent web se resuelve en la app de navegador predeterminada del usuario en su lugar.
Cómo agregar filtros de intents para vínculos entrantes
Para crear un vínculo al contenido de tu app, agrega un filtro de intents que contenga estos elementos y valores de atributos en tu manifiesto:
<action>
- Especifica la acción del intent
ACTION_VIEW
para que se pueda acceder al filtro de intents desde la Búsqueda de Google. <data>
- Agrega uno o más
<data>
etiquetas, cada una de las cuales representa un formato URI que se resuelve en la actividad. Como mínimo, el La etiqueta<data>
debe incluirandroid:scheme
.Puedes agregar más atributos para mejorar el tipo de URI que acepta la actividad. Por ejemplo, puedes tener varias actividades que acepten URI similares y que, no obstante, difieran simplemente en el nombre de la ruta de acceso. En este caso, usa el Atributo
android:path
o sus variantespathPattern
opathPrefix
para diferenciar cuáles la actividad que el sistema debe abrir para diferentes rutas de URI. <category>
- Incluye la categoría
BROWSABLE
. Es necesaria para que se pueda acceder al filtro de intents desde un navegador web. Sin ella, cuando se hace clic en un vínculo dentro de un navegador, no se redirecciona a tu app.Incluye también la categoría
DEFAULT
. De esta manera, tu app puede responder a intents implícitos. Sin ella, solo se puede iniciar la actividad si el intent especifica el nombre del componente de la app.
En el siguiente fragmento XML, se muestra cómo puedes especificar un filtro de intents
en tu manifiesto para los vínculos directos. Los URI “example://gizmos”
y “http://www.example.com/gizmos”
resuelven esta actividad.
<activity android:name="com.example.android.GizmosActivity" android:label="@string/title_gizmos" > <intent-filter android:label="@string/filter_view_http_gizmos"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "http://www.example.com/gizmos” --> <data android:scheme="http" android:host="www.example.com" android:pathPrefix="/gizmos" /> <!-- note that the leading "/" is required for pathPrefix--> </intent-filter> <intent-filter android:label="@string/filter_view_example_gizmos"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- Accepts URIs that begin with "example://gizmos” --> <data android:scheme="example" android:host="gizmos" /> </intent-filter> </activity>
Ten en cuenta que los dos filtros de intents solo difieren en el elemento <data>
.
Aunque es posible incluir varios elementos <data>
en el mismo filtro,
es importante que crees filtros separados si deseas declarar un
URLs (como una combinación específica de scheme
y host
), porque
se fusionan en realidad varios elementos <data>
en el mismo filtro de intents
para considerar todas las variaciones de sus atributos combinados. Por ejemplo, considera lo siguiente:
<intent-filter> ... <data android:scheme="https" android:host="www.example.com" /> <data android:scheme="app" android:host="open.my.app" /> </intent-filter>
Puede parecer que solo admite https://www.example.com
y
app://open.my.app
Sin embargo, también es compatible con app://www.example.com
y https://open.my.app
.
Precaución: Si varias actividades contienen filtros de intents que resuelven el mismo Android App Link verificado, no hay garantía de qué actividad maneja el vínculo.
Una vez que hayas agregado filtros de intents con URI para el contenido de la actividad en tu app
manifiesto, Android puede enrutar cualquier Intent
que tenga URI coincidentes con tu app durante el tiempo de ejecución.
Para obtener más información sobre cómo definir filtros de intents, consulta Cómo permitir que otras apps inicien tu actividad
Lee datos de intents entrantes
Una vez que el sistema inicia tu actividad a través de un filtro de intents, puedes
Usarás los datos que proporciona Intent
para determinar lo que necesitas renderizar. Llamada
getData()
y
métodos getAction()
para recuperar los datos y
acción asociada con el Intent
entrante. Puedes llamar a estos métodos en cualquier momento del ciclo de vida de la actividad, pero generalmente debes hacerlo durante las primeras devoluciones de llamadas, como onCreate()
o onStart()
.
Este es un fragmento que muestra cómo recuperar datos de un
Intent
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) val action: String? = intent?.action val data: Uri? = intent?.data }
Java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData(); }
Sigue estas prácticas recomendadas para mejorar la experiencia del usuario:
- El vínculo directo debe llevar a los usuarios directamente al contenido, sin avisos, páginas intersticiales ni registros. Asegúrate de que los usuarios puedan ver el contenido de la app incluso si nunca antes la abrieron. Puedes pedirles a los usuarios que realicen interacciones posteriores o cuando abran la app desde el Selector.
- Sigue la guía de diseño que se describe en Navegación con los botones atrás y arriba para que tu app coincida con la de los usuarios las expectativas sobre la navegación hacia atrás después ingresan a la aplicación a través de un vínculo directo.
Prueba tus vínculos directos
Puedes usar el SDK de Android Debug Conexión con la herramienta de administrador de actividades (am) para probar que el filtro de intents Los URI que especificaste para el vínculo directo resuelven la actividad en la app correcta. Puedes ejecutar el comando adb en un dispositivo o un emulador.
La sintaxis general para probar un URI de filtro de intents con adb es la siguiente:
$ adb shell am start -W -a android.intent.action.VIEW -d <URI> <PACKAGE>
Por ejemplo, el siguiente comando intenta ver una actividad en la app de destino que se asocia con el URI especificado.
$ adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.example.android
La declaración del manifiesto y el controlador de intents que estableciste anteriormente definen la conexión entre tu app. y un sitio web, y qué hacer con los vínculos entrantes. Sin embargo, en para que el sistema trate a tu aplicación como el controlador predeterminado para un conjunto de URI, debes solicitar que el sistema verifique esta conexión. En la siguiente lección, se explica cómo implementar esta verificación.
Para obtener más información sobre intents y vínculos de apps, consulta los siguientes recursos:
- Intents y filtros de intents
- Cómo permitir que otras apps inicien tu actividad
- Cómo agregar Android App Links con Android Studio