Aplicaciones instantáneas de Android 101: qué son y cómo funcionan

Las aplicaciones instantáneas de Android son una forma nueva y genial de consumir aplicaciones nativas sin instalación previa. Solo se descargan y ejecutan partes de la aplicación, lo que brinda a los usuarios una apariencia nativa en un par de segundos.

¿Cómo trabajan?

En primer lugar, no los confunda con las aplicaciones web progresivas, donde un icono de iniciador abre una aplicación web a través del navegador Chrome. En realidad, se instalará una aplicación instantánea en su teléfono, pero sin la necesidad de buscarla en Play Store.

Las URL web activarán Google Play Store en su teléfono y solo recuperarán la parte de la aplicación que está asociada con la URL solicitada. El resto de la aplicación no se descarga. De esta forma, los usuarios pueden disfrutar rápidamente de la experiencia nativa de su aplicación de Android.

¿Cuál es el trasfondo?

Bueno, necesitas dividir tu proyecto de Android en un par de módulos. Uno de ellos es un módulo base con el código esencial que se utiliza en todos los demás módulos (conexión API, base de datos, preferencias compartidas, etc.). El otro, los módulos de funciones, contienen funcionalidades y actividades específicas a las que se puede acceder a través de las URL asociadas.

Supongamos que tiene una aplicación web con una lista de productos y una sola página del producto. Por ejemplo, puede vincular //example.domain/products para iniciar ProductsListActivity y //example.domain/products/12 para iniciar ProductActivity .

Para que sean accesibles como actividades de aplicaciones instantáneas, deben estar empaquetadas en módulos de funciones individuales y deben tener enlaces de aplicaciones asociados definidos en sus manifiestos de módulo. Los llamaremos módulos de lista de productos y productos.

Ahora, cuando un usuario intenta abrir //example.domain/products/12 , los módulos Product y Base comenzarán a descargarse y se lanzará ProductActivity.

¿Qué son los enlaces de aplicaciones y cómo se definen?

Probablemente hayas oído hablar de los enlaces profundos. Se definen en el manifiesto de la aplicación y se registrarán en el sistema operativo. Cuando un usuario intenta abrir dicho enlace, el sistema operativo le pedirá al usuario que elija entre abrir el enlace en un navegador web o en su aplicación. Sin embargo, esto no es suficiente para las aplicaciones instantáneas, debe ir un paso más allá: enlaces de aplicaciones. Debe incluir la propiedad autoVerify = ”true” .

Su aplicación verificará si los enlaces que especificó están realmente asociados con su dominio. Para ello, debe incluir el archivo assetlinks.json en la siguiente carpeta de la raíz de su dominio:

//example.domain/.well-known/assetlinks.json.

Además, observe la propiedad android: order = ”100 ″ . En realidad, esto es una prioridad en este caso. Si tiene una lista de productos y un producto único que corresponden a la misma ruta (/ productos y / productos / 10) , se lanzará la actividad única del producto si hay una identificación después de la ruta / productos . De lo contrario, se inicia la actividad de la lista de productos.

Es muy importante definir esto. Si hay dos actividades que corresponden a la misma ruta, Play Store no sabrá qué parte de la aplicación debe buscarse.

Asocia tu aplicación a tu dominio

El assetlinks.json deberá contener los hashes del almacén de claves SHA256. El campo de relación se establece en el valor predeterminado a continuación, y el objeto de destino debe completarse con datos específicos de la aplicación y su hash SHA256 del almacén de claves.

[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints":["00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00"] } }]

Cuando autoVerify = true hace su magia, todos los enlaces de aplicaciones asociados iniciarán directamente su aplicación. Si no tiene la aplicación instalada, la aplicación instantánea se descargará en su lugar.

Aquí hay un ejemplo de una aplicación de demostración que hicimos recientemente. Cuando se hace clic en el enlace asociado, se abre una pantalla como esta y se ofrece usar la aplicación instantánea en su lugar. Tenga en cuenta lo rápido que se abre la aplicación y en Oreo es aún más rápido.

¿Cómo definir los módulos instantáneos de Android?

Para una aplicación instantánea, su proyecto constará de al menos tres módulos diferentes. Necesita usar Android Studio 3.0 para esto. Si está creando su aplicación desde cero, hay una opción para habilitar la compatibilidad con la aplicación instantánea para su proyecto.

Todos los siguientes módulos se inicializarán automáticamente. Si está modificando una aplicación anterior, deberá dividir el módulo de la aplicación anterior en un solo módulo base y un par de módulos de funciones. Además, deberá crear una aplicación y un módulo de aplicación instantánea, que utilizará para crear APK de aplicaciones tanto normales como instantáneas.

Módulo de aplicación

Primero, debe crear un módulo de aplicación que defina las dependencias para todos los demás módulos (módulos base + funciones). En el archivo build.gradle de este módulo, deberá definir lo siguiente:

apply plugin: 'com.android.application' ...
dependencies { implementation project(':product') implementation project(':productlist') implementation project(':base') }

Módulo base

En este módulo, definirá las siguientes declaraciones de dependencia. Además, asegúrese de que el complemento 'com.android.feature' se aplique aquí.

apply plugin: 'com.android.feature' android { baseFeature true ... } 
dependencies { api 'com.android.support:appcompat-v7:26.0.1' api 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'com.google.firebase:firebase-appindexing:11.0.4' application project(':app') feature project(':product') feature project(':productlist') }

Tenga en cuenta que aquí, las declaraciones de compilación se convierten en declaraciones de API para las dependencias regulares que usamos antes. El proyecto de aplicación y los proyectos de características se definen por separado.

Módulo de funciones

Este módulo tendrá la siguiente configuración, también con el complemento com.android.feature aplicado.

apply plugin: 'com.android.feature' ... dependencies { implementation project(':base') ... }

Debe indicar qué módulo es su módulo base e incluirlo con la declaración del proyecto de implementación. A continuación, puede incluir las dependencias que son necesarias solo para este módulo específico. Por ejemplo, si está usando una biblioteca de animación que no se usa en ninguno de los otros módulos.

Módulo de aplicación instantánea

Finalmente, ahora hay un complemento com.android.instantapp que se incluirá en el archivo build.gradle para el módulo instantapp.

apply plugin: 'com.android.instantapp' dependencies { implementation project(':product') implementation project(':productlist') implementation project(':base') }

En este módulo, definiremos qué módulos se construirán como aplicaciones instantáneas. El resultado de la compilación del módulo de instantapp es un archivo zip con los APK de la aplicación instantánea que puede cargar por separado en Google Play Store en el administrador de versiones de Android Instant Apps. Estos APK se manejan de manera similar a los normales, tienen su propio historial de implementación y control de versiones.

¡Eso es! Es bastante sencillo comenzar a desarrollar aplicaciones instantáneas de Android. ¡Pero siempre hay un pero!

¿Cuáles fueron los desafíos de las aplicaciones instantáneas de Android?

First of all, the Instant Apps are not enabled by default for now. If you want to try it, you need to check your phone settings under Google account and enable the Instant Apps setting.

Next, we found that it’s extremely important to specify app links data in the following format:

 ...   

Both http and https schemes need to be defined as shown in this code snippet. Any other way would cause a link verification failure and the app wouldn’t be linked properly.

Also, there is a recommendation to include the following code snippet into one of the activities in your app manifest. This annotates which activity should be launched in case the Instant app is launched from the Settings or a system launcher.

The official documentation states that the Google Search would offer Instant app annotation by default (small thunder icon), but we had problems with it. For our demo app, this was not the case. Google Search results didn’t annotate our demo links as Instant apps and the links led to the web page. Only if we tried to open the associated link from another app, like Gmail, the whole instant app process was triggered and the instant app was launched. Have you encountered any similar problems?

Conclusion

When first announced two years ago, I was very enthusiastic about Android Instant Apps. They respond to the problem of users having to search for the apps on the Store and wait till they’re downloaded to start using them. Web apps are much more accessible in that regard and the ease of discovery is much better.

Instant apps come really close to filling this gap between web and native mobile apps. They already act very well and I think that they will become more popular with time. The main problems we encountered was a rather small community and the lack of proper documentation, but the situation on that matter is also getting better.

We would love to hear from you if you’ve tried using them or had any challenges implementing them!

Originally published at www.bornfight.com.