¿Por qué no se lanza mi actividad por URL?
Me doy cuenta de que hay varias preguntas similares, pero ninguna de las respuestas aceptadas están funcionando para mí. Como parte de un proceso oauth quiero un redireccionamiento de navegador para iniciar mi actividad. Como he visto en todas partes, he configurado un filtro de intenciones que supuestamente hace eso:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.codesta.test" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="7" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".BrowsableActivity" android:label="@string/app_name"> <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="http" android:host="oauth.android.mydomain.com" /> </intent-filter> </activity> </application> </manifest>
Sin embargo, cuando abro el navegador e ingrese http://oauth.android.mydomain.com recibo la página de "página web no disponible". También intenté definir mi propio esquema (que he leído no se recomienda generalmente) pero eso no trabajó tampoco.
- Manejo de URL específicas con filtros de intenciones en Xamarin Mono para Android
- Android nfc intent-filter para mostrar mi aplicación cuando nfc descubre una etiqueta
- Cómo filtrar correctamente Paquete reemplazado broadcast
- El receptor de Broadcast de Android no se ejecuta en la aplicación
- Android Intent-filter para GEO-URI
Estoy apuntando api nivel 7 y he probado el código en los dispositivos emulados ejecutando 2.1 y 2.2 sin éxito. Cualquier ayuda sería muy apreciada!
- Enviar una transmisión sólo a actividades específicas
- Abrir aplicación de URL funciona en Firefox para Android pero no en Google Chrome
- Detectar el compartidor utilizado para compartir contenido
- Enlace profundo de Android que funciona sólo en algunos sitios web
- Filtro de intenciones para exploradores de archivos comunes
- Permiso de dispositivo USB y filtro de intenciones Android
- ¿Cómo funciona la compra de una aplicación para habilitar las funciones de pago de otra aplicación?
- PACKAGE_REMOVED y luego PACKAGE_ADDED se disparan junto con PACKAGE_REPLACED Intent Action
He encontrado el mismo problema – En la medida de lo que puedo, varios sitios OAuth utilizan una etiqueta <META … /> para hacer el redireccionamiento final que está intentando atrapar.
Los redireccionamientos que usan la etiqueta META no son capturados por el filtro Intent, por lo que el código nunca se ejecuta. Curiosamente, si el mismo enlace hace clic en el mismo usuario, o se redirige mediante un encabezado Location:, se activa. Ya hay un boleto abierto de 2.2.1 de Android en esto, pero he perdido la referencia a él.
La solución usual es configurar una página real en la URL de devolución de llamada y redirigirla desde allí utilizando un encabezado Ubicación: a otro lugar que PUEDE capturar.
EDIT: Desde que he intentado esto con una ubicación: encabezado, y parece que los redireccionamientos en general a http: // no se capturan, pero redirigir a un esquema diferente (x-oauth: //) es mal visto, pero funciona.
No estoy seguro, puedo probar más tarde, pero creo que cuando lo ingresas en el navegador, estás diciendo al navegador que lo abra.
Lo que podría ser necesario es hacer clic en un enlace que carga ese esquema: // combinación de host, no sólo escribirlo en la "barra de url".
Edit: Lo siento, hice una prueba rápida, y este no es el caso. Sin embargo, el problema puede ser que el navegador intente resolver el host antes de que realmente llegue a la parte de intención y le ofrece a abrirlo con su aplicación. ¿Funciona con una URL real (suponiendo que tenía razón al adivinar que no era una url de resolución real?)
El filtro de intenciones funcionó bien para los esquemas http y https, siempre y cuando utilicé un dominio real. Sin embargo, el popup preguntando al usuario si quieren usar el navegador en lugar de la aplicación era inaceptable. Intenté usar mi propio esquema pero eso no trabajó (ninguna idea porqué).
Para los propósitos de mi aplicación era suficiente para crear una actividad con un WebView en lugar de utilizar el navegador de fleged y sobré el shouldOverrideUrlLoading de las peticiones de WebViewClient y trap para mi uri y enviarlos directamente a mi actividad. Esta solución realmente funciona mejor que lo que estaba tratando de hacer antes, porque el usuario no recibe un mensaje, y no tengo que definir un esquema global.
Ben …
Compruebe si cambia el esquema a https en lugar de http.
- Cómo ocultar el encabezado en CalendarView en DatePicker?
- Gradle imprime la advertencia aunque se selecciona SuppressWarnings