2010-11-18 23 views
9

He creado una aplicación que carga un WebView. Para iniciar sesión, el sitio web requiere autenticación básica. Cuando intento acceder al sitio web a través del navegador predeterminado, aparece un cuadro emergente que me solicita que ingrese mi nombre de usuario y mi contraseña.Cómo manejar la Autenticación básica en WebView

Si intento acceder al sitio web a través de mi aplicación, obtengo el error 401 y no aparezco. Me preguntaba si alguien podría ayudarme?

Respuesta

8

El sitio web requiere autenticación.

Primero reaccionar al error:

webview.setWebViewClient(new WebViewClient() { 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
    if (errorCode == 401) { 
     // show alert to enter username and password 
     // then when those are entered in the alert, 
     //  set it through the setHttpAuthUsernamePassword(...) shown below 
     //  and then reload the site 
    } 
    } 
}); 

Utilice esta función para configurar usuario y contraseña: WebView.setHttpAuthUsernamePassword()

webview.setHttpAuthUsernamePassword(host, realm, username, password); 

Todos son cadenas. Consulte el enlace de arriba para obtener más información sobre lo que significa host y realm.

solución encontrada aquí: Supply some basic auth credentials to a WebView?

+0

Gracias chicos por la respuesta rápida. Corrígeme si estoy equivocado, pero no usaría webview.setHttpAuthUsernamePassword (host, reino, nombre de usuario, contraseña); requieren que predefine el nombre de usuario y la contraseña dentro del código? Estaba tratando de averiguar cómo hacer que la aplicación muestre un nombre de usuario/cuadro de inicio de sesión como lo hace el navegador predeterminado. – Kyle

+0

vale ... se agregará para explicar cómo hacer eso en mi publicación aquí ... solo un segundo. –

+0

¡Gracias de nuevo! Todavía estoy recibiendo el 401, pero voy a seguir intentando esto para intentar que funcione. – Kyle

19

Creo que una solución más elegante que el que Patrick describe sería utilizar el método de WebViewClient onReceivedHttpAuthRequest como se describe aquí: http://www.mail-archive.com/[email protected]/msg30468.html

@Override 
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { 
    handler.proceed("username", "password"); 
} 
6
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { 
    handler.proceed("USERNAME", "PASSWORD"); 
} 

creo es útil sobre el error 401 en WebView.

+2

He intentado este método y terminó en un lío. Desaliento mucho el uso de este método. Si proporciona un nombre de usuario o contraseña incorrectos, la autenticación falla y la vista web sigue reintentando para la autenticación. Esto creaba repetidas llamadas a API en mi servidor, lo que terminaba en que el servidor se caiga. Puede considerar usar un contador y el método stopLoading() para evitar el bucle infinito. –

Cuestiones relacionadas