2010-11-18 10 views
9

Ho creato un'applicazione che carica una WebView. Per accedere, il sito Web richiede l'autenticazione di base. Quando provo ad accedere al sito web tramite il browser predefinito, ricevo una finestra pop-up che mi chiede di inserire il mio nome utente e la password.Come gestire l'autenticazione di base in WebView

Se provo ad accedere al sito tramite la mia applicazione, ottengo l'errore 401 e non compare. Mi stavo chiedendo se qualcuno potrebbe darmi una mano?

risposta

8

Il sito Web richiede l'autenticazione.

Per prima cosa è reagire all'errore:

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 
    } 
    } 
}); 

Usare questa funzione per impostare utente e la password: WebView.setHttpAuthUsernamePassword()

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

Tutti sono stringhe. Vedi il link sopra per maggiori informazioni su cosa significa host e regno.

soluzione trovata qui: Supply some basic auth credentials to a WebView?

+0

Grazie ragazzi per la rapida risposta. Correggetemi se ho torto, ma non webview.setHttpAuthUsernamePassword (host, realm, username, password); richiedono che io predefine il nome utente e la password all'interno del codice? Stavo cercando di capire come far apparire l'app come nome utente/casella di login come fa il browser predefinito .. – Kyle

+0

ok .. aggiungerò per spiegare come farlo nel mio post qui .. solo un secondo. –

+0

Grazie ancora! Sto ancora ricevendo il 401, ma continuerò a provare a farlo per cercare di farlo funzionare. – Kyle

19

mi sa una soluzione più elegante di quella Patrick descrive sarebbe quella di utilizzare il metodo di WebViewClient onReceivedHttpAuthRequest come descritto qui: 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"); 
} 

penso è utile per l'errore 401 su WebView.

+2

Ho provato questo metodo ed è finito in un casino. Scoraggia molto usando questo metodo. Se si fornisce un nome utente o una password errati, l'autenticazione fallisce e Webview continua a riprovare per l'autenticazione. Questo stava creando ripetute chiamate API sul mio server che hanno finito con il down server. Si può prendere in considerazione l'utilizzo di un contatore e il metodo stopLoading() per evitare il loop infinito. –

Problemi correlati