¿Alguien puede guiarme sobre cómo iniciar mi aplicación de Android desde el navegador de Android?
fuente
¿Alguien puede guiarme sobre cómo iniciar mi aplicación de Android desde el navegador de Android?
Use un <intent-filter>
con un <data>
elemento. Por ejemplo, para manejar todos los enlaces a twitter.com, debe poner esto dentro de su <activity>
en su AndroidManifest.xml
:
<intent-filter>
<data android:scheme="http" android:host="twitter.com"/>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Luego, cuando el usuario hace clic en un enlace a Twitter en el navegador, se le preguntará qué aplicación usar para completar la acción: el navegador o su aplicación.
Por supuesto, si desea proporcionar una estrecha integración entre su sitio web y su aplicación, puede definir su propio esquema:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Luego, en su aplicación web puede poner enlaces como:
<a href="my.special.scheme://other/parameters/here">
Y cuando el usuario hace clic en él, su aplicación se iniciará automáticamente (porque probablemente será la única que puede manejar el my.special.scheme://
tipo de uris). El único inconveniente de esto es que si el usuario no tiene la aplicación instalada, recibirá un error desagradable. Y no estoy seguro de que haya alguna forma de verificarlo.
Editar: para responder a su pregunta, puede usar getIntent().getData()
que devuelve un Uri
objeto. Luego puede usar Uri.*
métodos para extraer los datos que necesita. Por ejemplo, supongamos que el usuario hizo clic en un enlace para http://twitter.com/status/1234
:
Uri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"
Puedes hacer lo anterior en cualquier lugar de tu Activity
, pero probablemente quieras hacerlo onCreate()
. También puede usar params.size()
para obtener el número de segmentos de ruta en Uri
. Busque en javadoc o en el sitio web para desarrolladores de Android otros Uri
métodos que puede usar para extraer partes específicas.
android:exported="true"
a suActivity
manifiesto. Comprueba esta respuesta stackoverflow.com/a/13044911/1276636Todas las respuestas anteriores no funcionaron para mí
CHROME
al 28 de enero de 2014mi aplicación se inició correctamente desde http://example.com/someresource/ enlaces desde aplicaciones como hangouts, gmail, etc. pero no desde el navegador Chrome.
para resolver esto, para que se inicie correctamente desde CHROME, debe establecer un filtro de intención como este
tenga en cuenta el
pathPrefix
elementosu aplicación ahora aparecerá dentro del selector de actividad cuando el usuario solicite el patrón http://example.com/someresource/ del navegador Chrome haciendo clic en un enlace de los resultados de búsqueda de Google o en cualquier otro sitio web
fuente
Por favor vea mi comentario aquí: ¿ Hacer un enlace en el navegador de Android inicia mi aplicación?
Recomendamos encarecidamente a las personas que no usen sus propios esquemas, a menos que estén definiendo un nuevo esquema mundial de Internet.
fuente
En mi caso, tuve que establecer dos categorías para el
<intent-filter>
y luego funcionó:fuente
Por ejemplo, tienes las siguientes cosas:
Entonces debes hacer lo siguiente:
1) Agregue un filtro de intención a su Actividad (puede ser cualquier actividad que desee. Para obtener más información, consulte la documentación ).
2) Cree un archivo HTML para probar el enlace o use estos métodos.
3) Use Mobile Chrome para probar
4) Eso es todo.
Y no es necesario publicar aplicaciones en el mercado para probar enlaces profundos =)
Además, para obtener más información, consulte la documentación y la presentación útil .
fuente
También debe
<category android:name="android.intent.category.BROWSABLE"/>
agregarse al filtro de intención para que la actividad se reconozca correctamente desde el enlace.fuente
El siguiente enlace proporciona información sobre cómo iniciar la aplicación (si está instalada) directamente desde el navegador. De lo contrario, abre directamente la aplicación en Play Store para que el usuario pueda descargar sin problemas.
https://developer.chrome.com/multidevice/android/intents
fuente
Tenga en cuenta que si su icono desaparece del iniciador de Android cuando implemente esta función, debe dividir el filtro de intención.
fuente
Sí, Chrome busca en lugar de buscar un esquema. Si desea iniciar su aplicación a través del esquema URI, use esta genial aplicación de utilidad en Play Store. Me salvó el día :) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender
fuente
Xamarin puerto de la respuesta de Félix
En su
MainActivity
, agregue esto ( docs: Android.App.IntentFilterAttribute Class ):Xamarin agregará lo siguiente
AndroidManifest.xml
para usted:Y para obtener parámetros ( probé en OnCreate of MainActivity ):
Hasta donde sé, lo anterior se puede agregar en cualquier actividad, no solo en MainActivity
Notas:
OnCreate
evento de la aplicación seMainLauncher Activity
activará nuevamente.<a href="my.special.scheme://host/arg1/arg2">
en el último fragmento de código anterior, los valores serán:Actualización: si Android crea una nueva instancia de su aplicación, también debe agregarla
android:launchMode="singleTask"
.fuente
El enfoque de Felix para manejar enlaces profundos es el enfoque típico para manejar enlaces profundos. También sugeriría revisar esta biblioteca para manejar el enrutamiento y el análisis de sus enlaces profundos:
https://github.com/airbnb/DeepLinkDispatch
Puede usar anotaciones para registrar su Actividad para un URI de enlace profundo particular, y extraerá los parámetros por usted sin tener que hacer el rigmarole habitual de obtener los segmentos de ruta, hacer coincidirlos, etc. Simplemente podría anotar y realizar actividades como esta :
fuente
Hola, tengo la solución. No configuré la categoría como "Predeterminada". También estaba usando la actividad Principal para los datos de intención. Ahora estoy usando una actividad diferente para los datos de intención. Gracias por la ayuda. :)
fuente
Debe agregar un pseudonombre de host a CALLBACK_URL 'app: //' no tiene sentido como URL y no se puede analizar.
fuente
ejemplo.php:
fuente
Mira la respuesta de @JRuns aquí . La idea es crear html con su esquema personalizado y subirlo a alguna parte. Luego, si hace clic en su enlace personalizado en su archivo html, será redirigido a su aplicación. Usé este artículo para Android. Pero no olvide establecer el
Name = "MyApp.Mobile.Droid.MainActivity"
atributo de nombre completo para su actividad objetivo.fuente
A partir del 15/06/2019
lo que hice fue incluir las cuatro posibilidades para abrir url.
es decir, con
http
/https
y 2 conwww
prefijo y 2 sinwww
y al usar esto, mi aplicación se inicia automáticamente ahora sin pedirme que elija un navegador y otra opción.
fuente