2011-03-04 20 views
5

Me doy cuenta de que hay varias preguntas similares, pero ninguna de las respuestas aceptadas me funciona. Como parte de un proceso oaut, quiero un redireccionamiento de navegador para iniciar mi actividad. A medida que he visto en todas partes, he creado un filtro intención de que supuestamente hace eso:¿Por qué mi actividad no se lanza por URL?

<?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 y entre http://oauth.android.mydomain.com tengo la "página Web no está disponible" página de error. También traté de definir mi propio esquema (que he leído generalmente no se recomienda) pero tampoco funcionó.

Me estoy dirigiendo a api nivel 7 y he probado el código en dispositivos emulados ejecutando 2.1 y 2.2 sin éxito. ¡Cualquier ayuda sería muy apreciada!

+0

esto siempre ha sido un dolor para mí y nunca tuve una buena solución. –

Respuesta

0

El filtro de intención funcionaba bien para los esquemas http y https siempre que utilizara un dominio real. Sin embargo, la ventana emergente que pregunta al usuario si quiere usar el navegador en lugar de la aplicación no es aceptable. Intenté usar mi propio esquema, pero eso no funcionó (ni idea de por qué).

Para los fines de mi aplicación, fue suficiente crear una actividad con WebView en lugar de utilizar el explorador totalmente descartado y anulé el shouldOverrideUrlLoading de WebViewClient y capté las solicitudes de mi uri y las envié directamente a mi actividad. Esta solución en realidad funciona mejor de lo que estaba tratando de hacer antes porque el usuario no recibe un aviso, y no tengo que definir un esquema global.

0

No estoy seguro, puedo probarlo más tarde, pero creo que cuando lo ingresa en el navegador, le está diciendo al navegador que lo abra.

Lo que podría necesitarse es hacer clic en un enlace que cargue ese esquema: // combinación de host, no solo escríbalo en la "barra de url".

Editar: Lo siento, hice una prueba rápida, y este no es el caso. Aún así, el problema podría ser que el navegador intente resolver el host antes de que llegue a la parte de intención y le ofrezca 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?)

+0

Funciona si ingreso a http://midominio.com - aparece un cuadro de diálogo que me pregunta si deseo usar el navegador o usar la aplicación para completar la acción (lo cual no es ideal).Sin embargo, no funciona cuando el navegador realiza una redirección a oauth.android.mydomain.com que es lo que realmente necesito. – Ben

0

Ben ...

Consulte a cambiar el esquema a https en lugar de http.

2

Tuve el mismo problema: en la medida de lo posible, varios sitios de OAuth usan una etiqueta < META .../> para hacer la redirección final que intentas atrapar.

Los redireccionamientos con la etiqueta META no son detectados por el filtro de intención, por lo que su código nunca se ejecuta. Extrañamente, si el usuario hace clic en el mismo enlace o se lo redirecciona utilizando un encabezado Location: se activa. Ya hay un ticket de error de android 2.2.1 abierto sobre esto, pero he perdido la referencia al mismo.

La solución habitual consiste en configurar una página real en la URL de devolución de llamada, y redirigirla desde allí utilizando un encabezado de Ubicación: a otro lugar que PUEDE capturar.

EDITAR: He intentado esto con un encabezado Location: y parece que los redireccionamientos en general a http: // no se capturan, pero redirigir a un esquema diferente (x-oauth: //) está mal visto, pero funciona

Cuestiones relacionadas