Abrir mi aplicación del esquema de URL en Android
Sé que hay varias preguntas sobre SO sobre esto, pero ninguna de ellas está ayudando a resolver mi problema.
Quiero poder hacer clic en un enlace de un correo electrónico / texto / navegador y abrir mi aplicación.
- Excluir pocas URL de la vinculación
- Error de enlace de datos: los valores antiguos deben ser seguidos por nuevos valores. El parámetro 2 debe ser del mismo tipo que el parámetro 3
- Excepción de ClassCast de Android al vincular al servicio
- Clase de enlace de datos no generada
- Android IntentService proporciona datos a Actividad
Tengo el código de AndroidManifest.xml :
<!-- Splash Activity --> <activity android:name=".ui.SplashActivity" android:label="@string/app_name" android:theme="@style/SplashTheme" android:launchMode="singleTask"> <!-- Launcher intent filter --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!-- Branch URI scheme --> <intent-filter> <data android:scheme="myscheme" android:host="open" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> </activity>
Sin embargo, al usar Chrome (o Navegador Android), esto parece seguir la documentación aquí , para navegar por myscheme://open
, mi aplicación no se abre y en cambio obtengo resultados de búsqueda de myscheme: // open .
¿Puede alguien ver qué pieza del rompecabezas que me falta aquí? ¿Cómo puedo abrir mi aplicación a través de URI?
Pequeña actualización:
Después de leer esto , he encontrado que la navegación de Chrome para el market://details?id=com.myapp
no abre la tienda de juegos. En su lugar, devuelve los resultados de búsqueda de Google, al igual que cuando intento iniciar mi aplicación directamente. Lo cual es confuso. ¿Estoy perdiendo una configuración global de SO para permitir una vinculación profunda?
- Deep linking y múltiples instancias de aplicación
- Enlace profundo de Android: utiliza el mismo enlace para la aplicación y la tienda de reproducción
- Cómo graciosamente regresar a la página web cuando Deep Link no puede ser manejado por la aplicación
- Android Databinding: "Referencias de métodos con '.' es obsoleto"
- Android Deep Linking problema! Cómo utilizar el esquema de URL personalizado myapp: // some_data
- Cómo realizar vinculación de datos de dos vías con un ToggleButton?
- Android deeplink por sabor
- La vinculación profunda no abre una aplicación nueva
Chrome no abre aplicaciones desde esquemas de URI introducidos manualmente. De hecho, un vínculo introducido manualmente nunca lanzará una aplicación externa en Chrome. Esto es por diseño – por alguna razón, el equipo de Chrome siente que los usuarios deben mantenerse siempre dentro del navegador después de ingresar una dirección.
Puedes solucionar esto hasta cierto punto poniendo el vínculo profundo detrás de una acción de unidad de usuario (una etiqueta <a>
estándar, por ejemplo), pero Chrome tiene su propio estándar llamado Chrome Intents que se supone que debes usar en su lugar. Dependiendo del dispositivo que esté utilizando, también podría ser el caso del navegador estándar.
En otras aplicaciones, depende de la aplicación en cuestión si un esquema de URI personalizado se identifica como un "vínculo que se puede hacer clic". Para una mejor compatibilidad, deberás envolverla dentro de un enlace http://
normal con un redireccionamiento.
Si usted está interesado en una explicación en profundidad de las complicaciones alrededor de la vinculación profunda, este post es un buen lugar para comenzar. Si solo quieres que funcione sin mucho esfuerzo, Branch.io (revelación completa: estoy en el equipo de Branch) resuelve este problema como un servicio gratuito.
No es necesario que ninguna aplicación preste atención a myscheme://open
.
En particular:
-
No es necesario que ningún navegador web intente iniciar alguna aplicación de terceros cuando escribe
myscheme://open
en la barra de direcciones, ya que es poco probable que los usuarios hagan eso en el mundo real. -
No es necesario que un programa de correo electrónico intente crear un
ACTION_VIEW
Intent
formyscheme://open
. -
No hay ningún requisito para que un cliente de SMS busque todos los mensajes entrantes para la cadena
myscheme://open
, se da cuenta de que esto es de alguna manera un enlace de aplicación y hace algo con él.
Tendrás un poco mejor de suerte en general usando una URL https
(o una URL de pellizco) como enlace de la aplicación (la URL http://www.example.com/gizmos
de la documentación a la que has enlazado ). A continuación, los clientes de SMS pueden reconocer que se trata de una URL y hacer algo con ella. Y, en general, debe ser llevado a su aplicación o a su página web, que son al menos algo útil para el usuario. Sin embargo, su aplicación todavía no se abrirá necesariamente cuando el usuario escriba su URL en la barra de direcciones, ya que los navegadores no esperan que se ingrese un enlace de la aplicación allí.
Puede aumentar las probabilidades de que un enlace de aplicación https
funcione y funcione de la manera que desee, publicando un archivo de vínculos de activos digitales y vinculándolo a su manifiesto.
Sin embargo, en general, esto sigue dependiendo de los clientes que optan por prestar atención a estas cosas. A veces lo harán, porque Android hace que sea relativamente fácil hacerlo. A veces no lo harán. Un navegador web es bienvenido a ver su URL, ver que es https
, decir "hey, como un navegador web, sé cómo manejar esto!", Y vaya a cargar esa página web, haciendo caso omiso de su aplicación instalada. Usted y yo podríamos considerar que es un error en ese navegador; Los desarrolladores de ese navegador son bienvenidos a estar en desacuerdo.
He encontrado que la navegación de Chrome para el mercado: // detalles? Id = com.myapp no abre la tienda de juegos
Esto se remonta a la parte de "los desarrolladores pueden hacer lo que quieren". Si ha hecho clic en un enlace de una página Web a esa URL, existe la posibilidad de que Chrome lo lleve a Play Store. Sin embargo, Chrome no está obligado a tratar la barra de direcciones de la misma manera que trata un enlace en una página Web.
- Comunicación de Android entre Actividades sin onActivityResult
- ¿Cómo obtengo el número de versión de una aplicación en Android?