open - Estoy intentando probar las URL de enlace profundo de Android a través de adb para iniciar mi aplicación
link para abrir una app (4)
Como mencionó la otra respuesta, debe ser "example: // gizmos" y no "example: gizmos"
Alternativamente, en lugar de usar adb, puede probar enlaces profundos directamente en Android usando la aplicación de prueba de enlaces profundos:
https://play.google.com/store/apps/details?id=com.manoj.dlt
No es necesario mencionar ningún nombre de paquete o nombre de componente. Solo escribe el enlace profundo y dispara.
He encontrado que las pruebas de enlaces profundos a través de adb son complicadas y difíciles a veces. Por lo tanto, he construido esta pequeña aplicación para hacerlo.
Cuando escribo el comando en adb:
./adb shell am start -W -a android.intent.action.VIEW -d "example:gizmos" com.myapp
Me sale este error:
Starting: Intent { act=android.intent.action.VIEW dat=example://gizmos pkg=com.myapp }
Error: Activity not started, unable to resolve Intent { act=android.intent.action.VIEW dat=example://gizmos flg=0x10000000 pkg=com.myapp }
Pero cuando escribo el comando en adb:
./adb shell am start -W -a android.intent.action.VIEW -d "example:gizmos" com.myapp.activity.DeepLinkActivity
Todo funciona bien y recibo el mensaje y puedo ver el inicio de la actividad en el teléfono:
Starting: Intent { act=android.intent.action.VIEW dat=example://gizmos cmp=com.myapp.activity.DeepLinkActivity }
Status: timeout
Activity: com.myapp.activity.DrawerActivity
Complete
Mi pregunta es ¿por qué necesito obtener la ruta completa de mi actividad y no solo el nombre del paquete? Porque cuando las aplicaciones externas o el navegador intenten enlazar en profundidad, no invocarán la actividad en mi aplicación.
Este es mi AndroidManifest.xml
<activity
android:name=".activity.DeepLinkActivity">
<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"
android:host="gizmos" />
</intent-filter>
</activity>
La mejor solución para Android Studio se explica aquí: https://code.tutsplus.com/tutorials/how-to-enable-deep-links-on-android--cms-26317
TLDR: Android Studio -> Ejecutar -> Editar configuraciones
Cambie Iniciar en Opciones de inicio a "URL" e ingrese en la URL del campo de texto la url correcta: "algo: //"
No es necesario que especifique la ruta completa de su actividad, pero si desea probar si reacciona correctamente al URI en su aplicación, simplemente especifique el paquete de la aplicación:
adb shell am start -a android.intent.action.VIEW -d "example://gizmos" com.myapp
También hay un error en el comando que proporcionó, debería haber un example://gizmos
no un example:gizmos
Su comando es incorrecto porque está intentando con un nombre de paquete incorrecto. En lugar de com.myapp.activity.DeepLinkActivity
, debe escribir solo el nombre del paquete especificado en build gradle (Module: app) por ''Id. De aplicación'', por ejemplo, si su ID de aplicación es com.companyname
, entonces su comando sería así:
adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.companyname