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.
- JQuery Autocompletar trabajando en Chrome pero no en android usando phonegap
- Cómo obtener el código fuente de Chromium para Android
- Depurar una aplicación iónica para la plataforma android
- ¿Código fuente de la aplicación Android de Google Chrome?
- Habilitar cámara trasera con HTML5
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.
- Ejecución de tres.js en cromo móvil
- ERR_ADDRESS_UNREACHABLE para abrir mi localhost en Chrome Android
- La propiedad webkitForce del evento táctil: Feedback de presión de los dedos. Buscando documentación
- Ocultar la barra de direcciones del navegador móvil en cromo (android)
- ¿Cómo utilizar WebRTC en Android Kitkat?
- Desactivación de la función de extracción de cromo de Android para actualizar
- No se ha encontrado ninguna imagen de emulador al crear una aplicación de cromo móvil para Android
- Cree Chrome para Android
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