El enlace de la aplicación de Android no funciona en Android 12 y siempre se abre en el navegador

8 minutos de lectura

Avatar de usuario de Asd
asd

He alojado el archivo de enlaces de activos en nuestro dominio https://ourdomain/.well-known/assetlinks.json Y también verifiqué esto usando https://developers.google.com/digital-asset-links/tools/generator y desde el Asistente de enlaces de aplicaciones de Android Studio y obtuve el estado verificado de ambas formas. Pero cuando comparto APK de depuración para probar, siempre se abre en el navegador. También intenté cargar en la tienda de aplicaciones y descargar desde allí para probar, pero siempre se abre en el navegador.

Nota: para la compilación de depuración usé mi computadora portátil SHA-256 y una vez que la aplicación en vivo en Play Store cambió SHA (obtuve SHA-256 de Al ir al Panel de aplicaciones en Play Console y luego a Administración de versiones –> Firma de aplicaciones) en el archivo de enlaces de activos alojados en nuestro dominio https ://nuestrodominio/.bien-conocido/enlaces de activos.json

A continuación se muestra el código utilizado en el archivo de manifiesto.


     <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="https"
                android:host="abc.test.com" />
        </intent-filter>

  • Vaya a la información de su aplicación -> Abrir de forma predeterminada -> Enlaces para abrir en esta aplicación y confirme que su aplicación tiene su host abc.test.com como un enlace verificado.

    – lince

    29 de noviembre de 2021 a las 1:22

  • Hola, @lyncx, lo probé de esa manera y funciona bien. Pero no quiero hacerlo manualmente, sugiera si tiene alguna otra solución.

    – asd

    29 de noviembre de 2021 a las 8:13

  • Si los enlaces no se verifican automáticamente, entonces el problema es que la clave SHA no es correcta. Yo tuve el mismo problema. Asegúrese de que su clave SHA sea correcta y coincida con su bien conocido/assetjson.link. Asegúrate de descargar la aplicación desde la tienda de juegos si estás usando la clave SHA de producción.

    – lince

    29 de noviembre de 2021 a las 11:11

  • @lynx Una vez que mi aplicación está activa en Play Store, fui al Panel de aplicaciones en Play Console, luego a Gestión de versiones –> Firma de aplicaciones y obtuve SHA256 desde allí y actualicé en well-known/assetjson.link. Pero sigue sin funcionar. Ahora mi pregunta es cómo obtienes SHA, ¿podrías sugerirme?

    – asd

    30 de noviembre de 2021 a las 11:41

  • stackoverflow.com/a/71676088/6341943 Dado que la clave de firma de Play Console es diferente de la clave de firma generada por Android Studio, ambas deben agregarse en assetlinks.json.

    – voz_susurrada

    30 de marzo de 2022 a las 11:08

Debe agregar la verificación de enlace profundo. Ver https://doordash.engineering/2022/01/25/your-deep-links-may-be-broken-web-intents-and-android-12/

  • De este artículo probé android:autoVerify="true" en mi filtro de intenciones y lo arregló

    – ICW

    3 de agosto de 2022 a las 20:28

Deep-links están trabajando en Android 11 o antes pero en Android 12 no lo es

Pero incluso después de agregar assetlinks.json archivo y agregando todos los intent-filters. Android 12 todavía no está detectando deep-links. En Android-Manifest el archivo resulta que ese esquema es tag es necesario separarlo de la etiqueta de datos de esta manera:

// OLD - Which is only working Android 11 or before

<data
  android:host="domain.name"
  android:pathPrefix="/videos"
  android:scheme="https" />

// NEW - Which is working on all including Android 12

<data android:scheme="https" />
<data
    android:host="domain.name"
    android:pathPrefix="/videos" />

  • Esto no funciona en mi caso estoy usando el mismo

    – Sunil Kumawat

    29 de marzo de 2022 a las 8:32

  • No funciona para mi tampoco

    – moyo

    30 de marzo de 2022 a las 14:22

  • Esto no funciona para mí también.

    – Sonika

    21 de abril de 2022 a las 12:44

  • En nuestra aplicación nativa de reacción, no tenemos esto <data /> etiqueta en el AndroidManifest.xmlpero tenemos esta regresión en un dispositivo desde que actualizamos de Android 11 a 12. ¿De dónde sacaste esas etiquetas?

    – Dimitri Kopriwa

    3 mayo 2022 a las 11:30

  • Esto tampoco funciona para mí.

    – Halil Ozel

    1 de julio de 2022 a las 9:55

Avatar de usuario de Alireza Rabiei
Alireza Rabiei

Tengo el mismo problema y lo resolví yendo a la configuración de información de la aplicación -> establecer como predeterminado -> direcciones web de soporte y verá su enlace corto, así que actívelo y funcionará;)

Actualizar:

como todos dijeron que no es una forma programática, por lo que la mejor manera es ese enlace a continuación, dijo

  • ¿Hay alguna solución programática?

    –Huy Nguyen

    10 de marzo de 2022 a las 6:36

  • Confía en mí, no es la forma adecuada de resolverlo desde la perspectiva del desarrollador. Nadie de los usuarios hará eso, por lo que es una mala experiencia de usuario.

    – Miguel

    24 de marzo de 2022 a las 10:54

  • Pedir al usuario que lo haga no es correcto. El problema probablemente debería estar relacionado con la clave SHA256 que usamos en assetlinks.json. Así es como resolví mi problema stackoverflow.com/a/71676088/6341943

    – voz_susurrada

    30 de marzo de 2022 a las 11:07

  • @hushed_voice el comando es: adb shell pm set-app-links --package [PACKAGE_NAME] 1 [URL_HOST]p.ej adb shell pm set-app-links --package com.company.myapp 1 myapp.company.com Ver: desarrollador.android.com/entrenamiento/app-links/…

    – Usuario Rebo

    21 de abril de 2022 a las 14:48

  • Y antes de Android 12 (adb shell pm set-app-link [PACKAGE_NAME] always

    – Usuario Rebo

    21/04/2022 a las 17:35

En mi caso, la aplicación funciona en Android 11, pero no funciona en Android 12 cuando la aplicación está compilada y construida con Android Studio.

Probé la aplicación de producción; funciona bien con el enlace de la aplicación.

Para la compilación de desarrollo, tengo que ir a Información de la aplicación -> Abrir de forma predeterminada -> Agregar enlace -> marcar todos los enlaces disponibles

Esto parece suceder solo con compilaciones de desarrollo; las aplicaciones instaladas desde la tienda de aplicaciones de Google automáticamente tienen todos los enlaces seleccionados.

Avatar de usuario de Orest Hredil
orest hredil

En mi caso, el problema fue la inconsistencia entre las firmas SHA en la compilación de la tienda y https://ourdomain/.well-known/assetlinks.json, es por eso que los enlaces profundos se deshabilitaron de forma predeterminada en Android 12, para solucionarlo podemos conectar nuestro teléfono con compilación de problemas en el estudio de Android y ejecute este comando:

adb shell pm get-app-links com.your_app_package_name

como resultado deberías ver algo como esto:

com.your_app_package_name:
ID: .....
Signatures: [AB:CD:EF:HI:GK...]
Domain verification state:
   your_domain.com legacy_failure

a continuación, debe verificar si las huellas digitales de la firma están incluidas en su https://ourdomain/.well-known/assetlinks.json, en mi caso no, también tenga en cuenta que en el archivo assetlinks.json puede haber un par de firmas, por ejemplo, para compilaciones de depuración, alfa, beta y producción, debería verse a continuación:

[
  {
   "relation": ["delegate_permission/common.handle_all_urls"],
    "target": {
     "namespace": "android_app",
     "package_name": "com.your_app_package_name",
     "sha256_cert_fingerprints" :["DE:BU:GS:HA:25:6...","PR:OD:SH:A:25:6..."]
        }
    }
]

  • gracias, creé assetlinks.json pero usé sha256_cert_fingerprints con el comando gradlew signatureReport, pero esto no funcionó en el modo de lanzamiento, funcionó en el modo de depuración, pero su solución está bien y funciona.

    – ff.n

    17 de diciembre de 2022 a las 5:17

Avatar de usuario de Vinay Rathod
Vinay Rathod

Después de agregar assetlinks.json en el dominio, debe reinstalar la aplicación (simplemente desinstale la aplicación e instálela nuevamente) que funcionará

  • gracias, creé assetlinks.json pero usé sha256_cert_fingerprints con el comando gradlew signatureReport, pero esto no funcionó en el modo de lanzamiento, funcionó en el modo de depuración, pero su solución está bien y funciona.

    – ff.n

    17 de diciembre de 2022 a las 5:17

Avatar de usuario de Fabio De Lorenzo
fabio de lorenzo

Antes de Android 12, Deep Link seguía la implementación estándar con el código del Manifiesto:

<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="https" 
    android:host="www.yourdomain.dev"
    android:pathPrefix="/set/v1" />

Después de Android 12, debemos agregar autoVerify al filtro de intenciones:

<intent-filter android:autoVerify="true" tools:targetApi="m">

Y el sitio web debe verificarse agregando assetlinks.json al directorio .well-known en su sitio web (igual que lo hace Apple)

Pero, lo más importante, solo puede probar este edificio y firmar la aplicación: Build -> Generate Signed Bundle/APK

durante el desarrollo, puede probar su implementación manualmente habilitando el enlace en la aplicación en su dispositivo

  • ¿Estás diciendo que ahora se requiere verificar el sitio web? Hasta ahora, siempre hemos podido incluir solo la intención sin verificar y sin tener assetlinks.json. La única diferencia es que al usuario se le darán opciones sobre con qué abrir el enlace. Si verifica, entonces esa opción no se da. En mi caso, en realidad es más preferible que a los usuarios se les muestren las opciones…

    – Chris

    23 de febrero a las 16:30

  • Ok, sí, parece que lo hicieron obligatorio en Android 12 desarrollador.android.com/about/versions/12/…

    – Chris

    23 de febrero a las 16:35

  • @Chris sí, si usa https, el sitio web debe verificarse. Eso tiene sentido con la tendencia actual de seguridad que Google y Apple están introduciendo.

    – Fabio De Lorenzo

    24 de febrero a las 17:38

¿Ha sido útil esta solución?