De la web a la aplicación en un DeepLink



Las aplicaciones de Android son un reflejo del sitio o servicio y, a menudo, representan una funcionalidad similar en un shell conveniente. Debido a esto, el problema de la navegación entre una página en la web y un cliente instalado se vuelve urgente. Para resolver este problema, se inventaron enlaces profundos. Debajo del gato encontrará una historia fascinante sobre cómo los implementamos en casa y manejamos el caso cuando el usuario aún no ha instalado nuestra aplicación.

Los enlaces profundos se inventaron hace tanto tiempo que ahora es difícil imaginar una aplicación sin ellos. La tecnología en sí no requiere una nueva API de Android, sin embargo, si finaliza la indexación de la aplicación, es posible que funcione con la API 17.

Volvamos a los enlaces profundos. Su configuración es un conjunto de configuraciones para intento de filtro en el manifiesto de la aplicación, que describe los patrones de los enlaces admitidos.

Por ejemplo:

<intent-filter><data android:host="best.memes" android:pathPrefix="/memes" android:scheme="http" /> <data android:host="best.memes" android:pathPrefix="/jokes" android:scheme="https" /></intent-filter> 

Después de estas manipulaciones simples, cada vez que hace clic en un enlace que coincide con la configuración del filtro, se le ofrece al usuario la posibilidad de elegir entre varias aplicaciones, incluida la suya. A continuación, la actividad para la que establecemos el filtro de intención recibirá una intención que contiene un enlace. Si lo obtiene utilizando el método Intent # getData y analiza los parámetros necesarios, puede dirigir al usuario inmediatamente a la sección de interés.

Después de la implementación, puede surgir una pregunta razonable: ¿qué hacer si el usuario aún no tiene la aplicación? La respuesta serán diplinks especiales, que en este caso pueden dirigir a una persona al Mercado. Con la debida diligencia, puede generar dicho enlace usted mismo, pero no hay garantía de que funcione con todos los navegadores y en todas las versiones de Android. Ahora hay bastantes servicios que ofrecen una solución para al menos parte de estos problemas, por ejemplo, AppsFlyer con su OneLink o Firebase con DynamicLink. Todos ellos funcionan aproximadamente de la misma manera, solo DynamicLink utiliza servicios de Google preinstalados para procesar diplinks.

Onelink


OneLink mismo conduce a los servidores de AppsFlyer; determinan desde qué dispositivo ingresó el usuario a la red y lo redirigen a la dirección apropiada. Puede configurar redireccionamientos para escritorio, Android e iOS. Cuando se instala la aplicación de Android, el enlace vuela a través de Intent como un enlace profundo regular. Cuando no hay una aplicación, Google Chrome y Google Play entran en juego.

El navegador verifica la presencia de la aplicación. Chrome tiene una especificación para un formato de enlace específico, que luego se convierte a Intent y se envía al sistema. Proporciona la configuración de un enlace a Google Play en caso de que la aplicación no esté instalada. Más detalles se pueden encontrar aquí .

En general, en Google Play, puede transferir el enlace a la aplicación de tal manera que después de la instalación y el lanzamiento, se salteará parte de ella. Esto se implementa utilizando el parámetro de consulta url y se verá así:

play.google.com/store/apps/details?id=memes.best&url=https%3A%2F%2Fbest.memes%2Fjokes

En este caso, best.memes / jokes entrará en la aplicación después de que se instale como un enlace profundo. De manera predeterminada, AppsFlyer no funciona de esta manera: ofrece obtener el enlace a través de la interfaz de la biblioteca. Aparentemente, el enlace profundo se transfiere a la aplicación a través de los servidores de servicio.

 AppsFlyerLib.getInstance().init(KEY, new AppsFlyerConversionListener() { @Override public void onInstallConversionDataLoaded(final Map<String, String> map) { } @Override public void onInstallConversionFailure(final String s) { } @Override public void onAppOpenAttribution(final Map<String, String> map) { } @Override public void onAttributionFailure(final String s) { } }, mContext); 

Esto es muy inconveniente porque, en primer lugar, no podemos entender con certeza si necesitamos esperar algunos parámetros o si el usuario simplemente hizo clic en el icono y no habrá parámetros. En segundo lugar, queremos abrir inmediatamente la sección deseada de la aplicación, sin bloqueos y expectativas innecesarias. AppsFlyer ofrece abrir la pantalla principal y, cuando llegaron los parámetros (y si llegaron), redirigir. Este enfoque no nos convenía, por lo que generamos nuestra URL en Google Play con un parámetro para el caso cuando un usuario hace clic en el diploma desde un dispositivo Android y no tiene una aplicación. Lo configuramos en Onelink para obtener un enlace profundo en la aplicación sin tener que esperar a la biblioteca.

OneLink funcionó bien hasta que intentamos hurgar en Slack. El hecho es que abre enlaces en su navegador incorporado a través de las pestañas personalizadas de Chrome. En resumen, esta es una pestaña del navegador que se abre durante su aplicación y se puede personalizar para no salirse del estilo general (puede encontrar más detalles aquí ). En este caso, se abrirá la versión web de Google Play y no se reenviará el diploma a la aplicación después de la instalación. Del mismo modo, el navegador se comporta si copia OneLink en la barra de direcciones y sigue el enlace. Sobre este caso, los desarrolladores de Chrome escribieron en las Notas de la versión hace varias versiones. La conclusión es que con este enfoque, la redirección de Google Play no funciona cuando la aplicación no está instalada y el usuario permanece en la web. OneLink no pudo superar este comportamiento, por lo que recurrimos a DynamicLink.

Dynamiclink


La profunda integración de los servicios de Google Play en el sistema les permite optimizar la disponibilidad de la aplicación de destino en el dispositivo. Este es un ecosistema bastante cerrado, por lo que no fue posible comprender a fondo los principios de su funcionamiento, sin embargo, todo indica que Chrome está abriendo una actividad con progreso, propiedad de Google Play Services, que determina cómo lidiar con un enlace profundo. Después de eso, se produce una redirección en Google Play o en la aplicación. En este caso, el enlace profundo ingresa a la aplicación a través de Intent, es decir, sin muletas de biblioteca adicionales.

Subjetivamente, este enfoque no funciona más rápido que OneLink, pero funciona cuando abre enlaces en las pestañas personalizadas de Chrome, lo cual es una ventaja significativa porque muchas aplicaciones los usan.

Entre otras cosas, Firebase le permite ver cómo funciona el enlace y dónde se redirigirá al usuario en cada plataforma en cada caso. Se parece a esto:


Conclusiones


Como resumen, preparé una tabla dinámica. Creo que OneLink puede entenderse como cualquier solución competitiva, porque solo DynamicLink tiene acceso a los Servicios de Google Play, por lo tanto, no debería haber diferencias significativas entre otros servicios.
OneLink Aplicación de destino instaladaOneLink Aplicación de destino NO instaladaDynamiclink Aplicación de destino instaladaDynamiclink Aplicación de destino NO instalada
Enlace abierto por el sistema (ACTION_VIEW)+Tuve que "endurecer" para obtener un enlace profundo desde el principio++
El enlace se abre en las pestañas personalizadas de Chrome--++
Haga clic en el enlace en el navegador.+Tuve que "endurecer" para obtener un enlace profundo desde el principio++
El enlace se copia en la barra de direcciones.--++

La tabla muestra que en la implementación con DynamicLinks todo funciona sin muletas y en todos los casos nos interesa.

Enlaces utiles:


Gracias por su atencion! Estaré encantado de discutir en los comentarios cómo resolvió problemas similares.

Source: https://habr.com/ru/post/477602/


All Articles