Estoy desarrollando una aplicación que usa OAuth para la autenticación, pero tengo un pequeño problema con las devoluciones de llamada de OAuth.¿Cómo se manejan las devoluciones de llamada URL OAuth con filtros de intención si la autenticación se realiza con webview?
la autentificación
Mi aplicación tiene una vista web como la pantalla de inicio de sesión y me da una URL para cargar el formulario de autenticación en mi vista web. Digamos que la URL es:
https://myoauthhost.com/oauth/auth?response_type=code&client_id=XXXXXXX&redirect_uri=YYYYYYYY&scope=ZZZZZZZZZZ
y en la actividad de autenticación (AuthActivity.java), Tengo el siguiente:
String authURL = https://myoauthhost.com/oauth/auth?response_type=code&client_id=XXXXXXX&redirect_uri=YYYYYYYY&scope=ZZZZZZZZZZ
myWebView.loadUrl(authURL);
en el manifest.xml, Tengo el siguiente de devolución de llamada oauth manipulación:
<activity
android:name=".AuthActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<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:host="authprovider"
android:scheme="auth" />
</intent-filter>
</activity>
EL PROBLEMA
Esta url cuando se usa en la vista web (con el método loadURL()) redirige a otra URL que contiene REAL OAUTH WEB DE (que debe cargarse en la vista web). El problema es que esta redirección inicia automáticamente la selección de intento en Android: dado que la URL debe ser manejada por un navegador web, Android le permite elegir uno de los navegadores web disponibles en el teléfono para abrir la url.
Dado que esto no es lo que quiero, tengo que incluir el siguiente código para que el cambio de dirección se maneja dentro de la vista web, pero no se inicia un navegador web (o lo que sea):
myWebView.setWebViewClient(new WebViewClient());
así que con esto código, la redirección se maneja "dentro de la vista web" y tengo la pantalla de inicio de sesión mostrada.
Puedo ingresar las credenciales (por ejemplo: oauth a través de Twitter) pero cuando se realiza la autenticación, se recibe la devolución de llamada pero luego se activa la actividad que se encarga de la devolución (AuthActivity configurado para recibir una devolución de llamada en el manifiesto) no está lanzado. En cambio, tengo la vista web que muestra un mensaje que dice que no se puede encontrar la devolución de llamada url (en nuestro caso: authprovider: // auth/XXX? Xxx = yyy como se configuró en el manifiesto).
La razón puede ser que el siguiente código:
myWebView.setWebViewClient(new WebViewClient());
presentado anteriormente, dice que el androide vista web se encarga de todo. Entonces, como la url de devolución de llamada no es una url web, tiene problemas para manejarla y ni siquiera puede lanzar la intención que puede manejarla.
LA PREGUNTA
¿Cómo puedo solucionar este problema? Debería poder dejar que la actividad maneje la devolución de llamada pero no permitir que la vista web intente cargarla.
cualquier ayuda se agradece
gracias de antemano
Tuve un caso diferente, tratando de integrar OAuth con 'AccountManager' y' android: launchMode = "singleInstance" 'trabajado para mí. – d370urn3ur