una studio responde por play permisos pasar otro multiples link desde compartir como celular app aplicaciones aplicacion abrir android android-6.0-marshmallow applinks

studio - Los enlaces de aplicaciones no funcionan en Android



permisos android studio (7)

Actualizar

Así que resolví mi problema. No estoy seguro de cuál lo hizo (podría haber sido una combinación), pero esto es lo que hice:

  • Desinstalado "Servicios de Google Play para aplicaciones instantáneas": anteriormente había probado las aplicaciones instantáneas, así que pensé que tal vez algunas configuraciones antiguas podrían estar como el nombre del paquete de depuración, sin embargo, esto es poco probable.
  • Dejó de usar proxies: los proxies son útiles para depurar llamadas de red, pero es posible que HTTP / 2 no sea totalmente compatible con las herramientas que estoy usando.
  • Eliminar filtro de intento para subdominios heredados: este es el más grande . Uno de mis subdominios ha quedado en desuso y ya no está disponible. En el AndroidManifest, si tiene varios nombres de host declarados para una actividad que contiene al menos un filtro de intento de AutoVerify, cada host se verifica para el archivo JSON de Enlace de Activos Digitales. Si autoVerify falla incluso para uno de los hosts, ninguno de los hosts se verifica automáticamente.

Original

La primera vez que enfrenté este problema fue porque mi red estaba bloqueando las llamadas a los servidores de Google para verificar los enlaces de la aplicación.

Como OP y otras respuestas han tocado, en general, la API llama al punto final:

digitalassetlinks.googleapis.com

debe tener éxito para omitir el diálogo de selección. Esta es la llamada web que realiza el sistema Android para verificar el archivo JSON de Enlace de Activos Digitales, y parece que se realiza tras la instalación / actualización de la aplicación. Un lugar útil para buscar es el Logcat, que busca elementos con el texto "I / SingleHostAsyncVerifier:". Si ve "-> verdadero" al final del registro, su aplicación

Últimamente, sin embargo, estas llamadas han estado fallando debido a lo que parece ser un error que puede haberse introducido recientemente. El dispositivo está recibiendo esta respuesta de la llamada a la API anterior:

Error: no disponible: tipo de contenido incorrecto en los encabezados de respuesta HTTP al obtener declaraciones de {host} /. Well-conocido / assetlinks.json (que es equivalente a ''{host} /. Well-conocido / assetlinks.json''): esperado '' Tipo de contenido: application / json ''pero encontró text / html [11] al obtener declaraciones web desde {host} ./. Well-conocido / assetlinks.json

Ha pasado un tiempo desde la última vez que miré estas solicitudes, así que no recuerdo cómo se veían antes. Pero parece posible que haya habido alguna actualización reciente relacionada con los enlaces de aplicaciones o el marco de trabajo de redes de Android, donde cambiaron a los búferes de protocolo para esta característica (y se olvidaron de admitirla en otra).

Otro indicio de que las cosas pueden haber cambiado, es que la ruta de solicitud de hoy parece diferente de las mencionadas en las respuestas anteriores:

https://digitalassetlinks.googleapis.com/google.digitalassetlinks.v1.AssetLinks/Check

Mi aplicación define los filtros de intención para manejar las URL de mi sitio definidas por

<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:host="www.host.com" android:scheme="http"/> </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:host="www.host.com" android:scheme="https"/> </intent-filter>

La aplicación detecta correctamente las URL del host correcto, pero consulta al usuario si desea abrirlas en la aplicación o el navegador. Intenté usar la verificación de enlaces de la aplicación como se especifica aquí. https://developer.android.com/training/app-links/index.html

Como se ve en los registros de mi servidor, cuando instalé la aplicación, el dispositivo consulta /well-known/assetlinks.json y responde con un estado 200. Probando el archivo de activos digitales usando el

https: // digitalassetlinks.googleapis.com/v1/statements:list?source.web.site= https: // <domain1>: <puerto> & relation = delegate_permission / common.handle_all_urls

API y no encontró errores.

El SHA256 en el archivo assetlinks.json se obtuvo usando

keytool -list -v -keystore my-release-key.keystore

El mismo .keystore del que se firmó la aplicación.

La ejecución de adb shell dumpsys package d devuelve que el estado de verificación del enlace es "preguntar", lo que significa que la verificación falló. ¿Por qué podría fallar la verificación?


En mi caso, adb shell dumpsys package d reveló que el packageName estaba configurado incorrectamente en assetlinks.json . Había usado el valor del atributo del package de mi etiqueta de manifest en AndroidManifest.xml , pero debería haber usado el valor android.defaultConfig.packageId en mi archivo build.gradle .


Hay algunas trampas comunes que deberías revisar dos veces (no digo que lo hayas hecho mal. Es solo una lista de verificación):

  1. Verifique que assetlinks.json sea ​​válido y esté almacenado accesible desde https://example.com/.well-known/assetlinks.json para hacer lo que necesita visitar https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site= https://example.com&relation=delegate_permission/common.handle_all_urls , no debe haber errores.
  2. Si vincula varios dominios a la vez, verifique que todos los dominios estén configurados correctamente como en el paso 1.
  3. Asegúrese de que aquellos <intent-filters> que contienen sus etiquetas <data> tengan el atributo android:autoVerify="true" .
  4. Verifique que tenga la etiqueta <meta-data> requerida en su etiqueta <application> :

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements"/>

    El contenido de la cadena asset_statements debe ser:

    <string name="asset_statements" translatable="false">[{/"include/": /"https://example.com/.well-known/assetlinks.json/"}]

  5. Use para depurar también el certificado de firma de lanzamiento (no se asuste, no puede cargarlo accidentalmente) use esto en su build.gradle :

    buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' signingConfig signingConfigs.release } debug { debuggable true signingConfig signingConfigs.release } }


Oh Gawd para nosotros fueron los finales de línea de Windows!

Las pruebas con " https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https:// : <puerto> & relación = delegate_permission / common.handle_all_urls" demostraron ser invaluables ya que nos dieron un "Podía "no analizar lista de instrucciones (no JSON válido)" error que nos llevó al problema.

SUGERENCIA: Fue bueno usar el botón "Guardar archivo" en el Asistente de enlaces de la aplicación de Android Studio en lugar de copiar y pegar como lo hicimos nosotros, de esa manera genera el archivo y se garantiza que no tendrá este problema.


Para mí, fue el hecho de que mi archivo assetlinks.json era UTF-8 y contenía una marca de orden de bytes (BOM), que es un número mágico de tres bytes al principio del archivo que señala la codificación a un programa consumidor. . La lista de materiales es opcional, y al parecer a las herramientas de Google / Android no les gusta verla. Cuando estuvo presente, el verificador de enlaces de activos digitales de Google (URL a continuación) me dio un error de "JSON con formato incorrecto".

Si está utilizando Visual Studio, a continuación le indicamos cómo determinar si tiene la lista de materiales en su archivo y eliminarla si es necesario:

  1. Haga clic con el botón derecho en el archivo assetlinks.json.
  2. Elija "Abrir con ..." en el menú contextual.
  3. Elija "Editor binario" en el cuadro de diálogo "Abrir con".
  4. Examine los bytes del archivo. Si el archivo comienza con EF BB BF , ese es el problema.
  5. Borre esos caracteres (puede hacerlo a través de cualquiera de las columnas) y guarde el archivo.
  6. Vuelva a cargar el archivo y pruébelo con las herramientas de Google (URL a continuación) y debería funcionar correctamente para usted.

Aquí está la URL que puede usar para verificar su archivo (reemplace example.com con su URL real):

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://example.com&relation=delegate_permission/common.handle_all_urls


Para mí, todo se redujo a revisar todos los conceptos básicos:

  1. Verifique que el archivo de mis enlaces de activos sea bueno con esta herramienta: (reemplace domain1: puerto con su dominio) https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://domain1:port&relation=delegate_permission/common.handle_all_urls
  2. Siempre prueba con un APK firmado
  3. Asegúrate de que el dispositivo de prueba esté ejecutando Android 6.0 o posterior (este es el que me mordió porque lo olvidé; en las versiones anteriores de Android, siempre recibes el aviso del usuario)

Ventana de selección de la aplicación del sistema en dos casos

1) El usuario realiza cambios en la configuración de apertura de enlaces al ir a configuración> aplicaciones> icono de engranaje> apertura de enlaces> seleccionar una aplicación> abrir enlaces admitidos> elegir mensaje cada vez.

2) La aplicación predeterminada no está configurada por el usuario y la verificación automática no está habilitada en una de las aplicaciones compatibles con enlaces

Creo que en su caso, la verificación automática está habilitada, así que verifique la configuración del usuario.