Deep Linking

¿Que es Deep Linking?

Deep linking es la forma en la cual podemos abrir nuestra aplicación desde enlaces web (url). Por ejemplo, si tenemos un link hacia Youtube Android nos consulta si queremos ver el video desde la aplicación de Youtube o desde el navegador web, como se ve en la siguiente foto:

Ahora, ¿Cómo hacemos esto?. Muy fácil! Nos dirigimos a nuestro manifiest y en la declaración de la actividad que queremos linkear, creamos un nuevo intent-filter que contiene la acción que se quiere hacer y las categorías que van a ser visibles según el intent. Finalmente agregamos el tag data que contiene la información de la pagina que queremos linkear. Por ejemplo:

<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:host="www.androidchile.org" android:pathPrefix="/verApp" android:scheme="http"/>
</intent-filter>

Dentro de data, tenemos el host, que es la pagina web que queremos abrir. También tenemos el pathPrefix que es la página o parte del sitio que queremos que active el deep link. Finalmente tenemos el scheme, que especifica si es http o https. En este caso, cuando llamemos a “http://www.androidchile.org/verApp”, Android nos consultará si queremos abrir nuestra app o el navegador web. Esto también lo podemos utilizar sin pathPrefix o con otra especie de url, por ejemplo “androidchile://verApp”. Para este caso el intent-filter será de la siguiente manera:

<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:host="verApp" android:scheme="androidchile"/>
</intent-filter>

Para testear estas 2 opciones, lo podemos hacer desde la terminal utilizado el adb, que se encuentra en la carpeta de instalación del SDK dentro de la carpeta “platform-tools”. El comando a usar es:

adb shell am start
  -W -a android.intent.action.VIEW 
  -d "http://www.androidchile.org/verApp" com.crossline.deeplinkexample

Para el segundo ejemplo el código a utilizar es:

adb shell am start 
        -W -a android.intent.action.VIEW 
        -d "androidchile://verApp" com.crossline.deeplinkexample

Ahora, tenemos un nuevo canal para abrir la actividad pero…… ¿Podremos enviar datos?,  la respuesta es si. Pero, ¿Cómo leemos la data?. Para eso nos dirigimos a nuestro activity y en el método onCreate hacemos la magia.

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_deep_link);
        //Obtenemos la información del intent
        Intent intent = getIntent();
        //Revisamos la acción que enviamos
        String action = intent.getAction();
        //Obtenemos la url 
        Uri data = intent.getData();
        // Obtenemos la información del campo data de la url ejemplo:
        // http://www.androidchile.org/verApp?data=comunidad de android
        String data = data.getQueryParameter("data");
        TextView txtTextoEnviado = (TextView)findViewById(R.id.txtTextoEnviado);
        txtTextoEnviado.setText(data);
    }

Ya con el envío de datos a través de una url, podremos abrir cualquier activity que queramos y enviar la información que necesitemos, y así poder manipular la información a visualizar de una manera mas fácil y accesible, tanto a nivel web como entre activity.

Comenta este post