Android M – La vinculación de aplicaciones no funciona en Chrome

Así que estoy buscando para implementar Enlaces de la aplicación en algunas nuevas aplicaciones y he leído bastante a fondo a través de las notas dev, configurar un servidor, agregó el archivo con la cabecera json correcta y construyó una aplicación de prueba. El enlace profundo de la aplicación introducido en Android M parece estar funcionando si me envío un correo electrónico con los enlaces adjuntos, pero cuando lo hago en una página de ejemplo en cromo, sólo vuelve a cargar la página. Sólo estoy golpeando la página de la raíz en mi servidor web. ( Https://www.EXAMPLE.com ). Inicialmente tenía algunos problemas de cert con cromo en mi tableta, pero he añadido el certificado de raíz y ahora viene verde

Estoy usando un Nexus 7 2013, recién limpiado y ejecutando Android M y Chrome, actualizado.

Estoy sirviendo un archivo HTML en mi servidor (como lo haría si tuviera una página de retorno).

Cualquier idea si esto es cómo estoy utilizando la página web / caer de nuevo, o si he configurado algo mal. Funciona bien en Gmail, sin selector de tareas, pero no en cromo.

Intenté mezclar algunos ejemplos html se parece a esto y ninguno funcionó.

<a href="EXAMPLE://">Click HERE for schema</a> <a href="https://www.EXAMPLE.com/">Click HERE for url with slash</a> <a href="https://www.EXAMPLE.com">Click HERE for url, no slash</a> <a href="#" onclick="window.location('https://www.EXAMPLE.com/')">Trying with onclick javascript</a> 

Mi androide manifiesto:

 <activity android:name=".deepActivity" android:label="@string/title_activity_deep" > <intent-filter android:autoVerify="true"> <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="https" android:host="www.MYDOMAIN.com" /> <!-- note that the leading "/" is required for pathPrefix--> <!-- Accepts URIs that begin with "example://gizmos”--> </intent-filter> 

Https://developer.android.com/training/app-links/index.html

editar:

He estado probando la auto-verificación con el siguiente comando:

 adb shell dumpsys package d | grep DOMAIN -ab5 

Y obtengo los resultados:

 230: Package: com.DOMAIN.deeplinkingtest 275: Domains: www.DOMAIN.com 308- Status: undefined 

De la documentación

Muestra la configuración actual de manejo de enlaces para esta aplicación. Una aplicación que ha pasado la verificación, y cuyo manifiesto contiene android: autoVerify = "true", muestra un estado de siempre. El número hexadecimal después de este estado está relacionado con el registro del sistema Android de las preferencias de vinculación de la aplicación del usuario. Este valor no indica si la verificación tuvo éxito.

Agregue la etiqueta HTML de la siguiente manera en su sitio web. <a href="http://domain.com" data-applink="domain.com">Link</a>

AndroidManifest.xml

 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <data android:scheme="http" /> <!-- or you can use deep linking like --> <data android:scheme="http" android:host="domain.com"/> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.BROWSABLE"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> 

… pero cuando lo hago en una página de ejemplo en cromo, sólo vuelve a cargar la página

Supongo que quieres decir que solo vas a Chrome y escribes https://example.com en la barra del navegador.

Desafortunadamente, la vinculación de aplicaciones no funcionará si escribe una URL en la barra del navegador. Esto puede sonar frustrante, pero hay una buena razón por qué esto no debería funcionar. Como Paul Kinlan, Google Dev Advocate explica que sería una mala experiencia de usuario:

Si un usuario introduce una URL en la barra de direcciones del sistema, entonces la intención del usuario es visitar la página en cuestión. No creemos que el usuario tenga la intención de ir a la aplicación. Ergo, redirigir al usuario a la aplicación es una experiencia de usuario pobre.

enlazar

Esta respuesta sólo se refiere a escribir la URL en la barra de URL de Chrome . Pero lo mismo (en su mayoría) es válido para si el usuario hace clic en un enlace en una página web . Veamos por qué las cosas no funcionan con cada uno de sus enlaces de ejemplo. Comenzaré con los dos medianos:

<a href="https://www.EXAMPLE.com/">Click HERE for url with slash</a>

<a href="https://www.EXAMPLE.com">Click HERE for url, no slash</a>

Para que estos vínculos inicien su aplicación, Chrome tendría que enviar una intención al sistema con action.VIEW , category.DEFAULT **, category.BROWSABLE y esquema http o https . Puede crear un filtro de intenciones que capte esta intención (su filtro de intenciones de vinculación de aplicaciones funcionará):

 <intent-filter android:autoVerify="true"> <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"/> </intent-filter> 

Si comprueba los registros (o simplemente prueba como lo ha hecho) puede ver que Chrome no dispara una intención. Ellos eligen manejar ese enlace internamente (navegando a una nueva página). Esta es una función de Chrome, no de Android. No hay manera de cambiar eso. Sin embargo, puede especificar un esquema personalizado en la URL que Chrome respetará. Eso me lleva a su primera URL:

<a href="EXAMPLE://">Click HERE for schema</a>

Chrome respetará el esquema en esta URL y disparará una intención: action.VIEW , category.DEFAULT **, category.BROWSABLE , y scheme EXAMPLE . Dependiendo de cómo haya configurado su filtro de intenciones, esto iniciará su aplicación. Su primer impulso podría ser agregar el esquema de EXAMPLE a su filtro de intenciones de vinculación de aplicaciones:

 <intent-filter android:autoVerify="true"> <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:scheme="EXAMPLE"/> <data android:host="www.example.com"/> </intent-filter> 

Esto te permitirá hacer clic en un enlace de Chrome y hacer que Chrome abra tu aplicación. Sin embargo, ahora se romperá App Linking . La solución pro es dejar su filtro de intenciones de vinculación de aplicaciones sin cambios y agregar un segundo filtro de intenciones para capturar su esquema personalizado:

 <!-- EXAMPLE scheme intent filter --> <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="EXAMPLE"/> <data android:host="www.example.com"/> </intent-filter> <!-- App Linking intent filter --> <intent-filter android:autoVerify="true"> <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"/> </intent-filter> 

Esto es probablemente TMI, pero llegar a la raíz ayuda a entender por qué las cosas están funcionando / no funciona.

** recuerde que el sistema agregará category.DEFAULT a cualquier intención implícita.

============================================

ACTUALIZACIÓN: Debo añadir que el uso de su propio esquema es mala práctica. Aquí se documenta un enfoque totalmente mejor

  • Chrome Browser para Android ya no admite -webkit-overflow-scrolling? ¿Hay alguna alternativa?
  • Reemplazar + con espacio en html Gmail / Android cromo
  • Android no se desplaza correctamente en el foco de entrada si no elemento del cuerpo
  • ¿Es posible establecer el agente de usuario en Chrometab en android
  • ¿Es posible desplazar divs en Chrome para Android?
  • ¿Google Chrome beta para la carga del archivo de soporte de Android con el atributo webkitdirectory?
  • Cómo inhabilitar el protector de datos cromado durante la depuración
  • Android Google Chrome no dispara después de la aplicación de lockscreen
  • @ Font-face no funciona en los navegadores de Android
  • ¿Cómo puedo abrir una aplicación de mi navegador web (Chrome) en Android? ¿Qué tengo que ver con el enlace A Href?
  • La soldadora ARC corta la barra de acción
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.