Buscar..


Introducción

Los enlaces profundos son URL que llevan a los usuarios directamente a contenido específico en su aplicación. Puede configurar enlaces profundos agregando filtros de intención y extrayendo datos de intentos entrantes para llevar a los usuarios a la pantalla correcta en su aplicación.

Parámetros

Atributo <data> Detalles
esquema El esquema parte de una URI (distingue entre mayúsculas y minúsculas). Ejemplos: http , https , ftp
anfitrión La parte del host de un URI (distingue entre mayúsculas y minúsculas). Ejemplos: google.com , example.org
Puerto El puerto parte de un URI. Ejemplos: 80 , 443
camino La parte del camino de un URI. Debe comenzar con / . Ejemplos: / , /about
PathPrefix Un prefijo para la parte de la ruta de un URI. Ejemplos: /item , /article
pathPattern Un patrón para que coincida con la parte de la ruta de una URI. Ejemplos: /item/.* , /article/[0-9]*
tipo MIME Un tipo mime para que coincida. Ejemplos: image/jpeg , audio/*

Observaciones

El <intent-filter>

Esta combinación de elementos <action> y <category> es lo que le dice al sistema Android que una Actividad específica debe iniciarse cuando el usuario hace clic en un enlace en otra aplicación.

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data ... />

</intent-filter>

Múltiples etiquetas <data>

El conjunto de enlaces profundos que admite su <intent-filter> es el producto cruzado de todos los elementos <data> que usted define en ese filtro de intención. El dominio múltiple, la ruta múltiple y los ejemplos de múltiples esquemas lo demuestran.

Recursos

Enlace profundo simple

AndroidManifest.xml:

<activity android:name="com.example.MainActivity" >
    
    <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="http"
              android:host="www.example.com" />

    </intent-filter>

</activity>

Esto aceptará cualquier enlace que comience con http://www.example.com como un enlace profundo para iniciar su MainActivity .

Múltiples rutas en un solo dominio

AndroidManifest.xml:

<activity android:name="com.example.MainActivity" >
    
    <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="http"
              android:host="www.example.com" />

        <data android:path="/" />
        <data android:path="/about" />
        <data android:path="/map" />

    </intent-filter>

</activity>

Esto lanzará su MainActivity cuando el usuario haga clic en cualquiera de estos enlaces:

  • http://www.example.com/
  • http://www.example.com/about
  • http://www.example.com/map

Múltiples dominios y múltiples caminos.

AndroidManifest.xml:

<activity android:name="com.example.MainActivity" >

    <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="http"
              android:host="www.example.com" />
    
        <data android:scheme="http"
              android:host="www.example2.com" />
    
        <data android:path="/" />
        <data android:path="/map" />
    
    </intent-filter>

</activity>

Esto lanzará su MainActivity cuando el usuario haga clic en cualquiera de estos enlaces:

  • http://www.example.com/
  • http://www.example2.com/
  • http://www.example.com/map
  • http://www.example2.com/map

Tanto http como https para el mismo dominio.

AndroidManifest.xml:

<activity android:name="com.example.MainActivity" >

    <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="http" />
        <data android:scheme="https" />
    
        <data android:host="www.example.com" />
    
        <data android:path="/" />
        <data android:path="/map" />
    
    </intent-filter>

</activity>

Esto lanzará su MainActivity cuando el usuario haga clic en cualquiera de estos enlaces:

  • http://www.example.com/
  • https://www.example.com/
  • http://www.example.com/map
  • https://www.example.com/map

Recuperando parámetros de consulta

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        Intent intent = getIntent();
        Uri data = intent.getData();

        if (data != null) {
            String param1 = data.getQueryParameter("param1");
            String param2 = data.getQueryParameter("param2");
        }
    }

}

Si el usuario hace clic en un enlace para http://www.example.com/map?param1=FOO&param2=BAR , entonces param1 tendrá un valor de "FOO" y param2 tendrá un valor de "BAR" .

Usando pathPrefix

AndroidManifest.xml:

<activity android:name="com.example.MainActivity" >

    <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="http"
              android:host="www.example.com"
              android:path="/item" />
    
    </intent-filter>

</activity>

Esto lanzará su MainActivity cuando el usuario haga clic en cualquier enlace que comience con http://www.example.com/item , como:

  • https://www.example.com/item
  • http://www.example.com/item/1234
  • https://www.example.com/item/xyz/details


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow