2010-11-18 5 views
9

J'ai créé une application qui charge un WebView. Pour se connecter, le site Web requiert une authentification de base. Lorsque j'essaie d'accéder au site Web via le navigateur par défaut, je reçois une boîte pop-up me demandant d'entrer mon nom d'utilisateur et mot de passe.Comment gérer l'authentification de base dans WebView

Si j'essaie d'accéder au site Web via mon application, j'obtiens l'erreur 401 et aucune fenêtre pop-up. Je me demandais si quelqu'un pouvait m'aider?

Répondre

8

Le site Web nécessite une authentification.

Tout d'abord vous réagissez à l'erreur:

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

Utilisez cette fonction pour définir l'utilisateur et mot de passe: WebView.setHttpAuthUsernamePassword()

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

Tous sont des chaînes. Voir le lien ci-dessus pour plus d'informations sur ce que signifie host et realm.

Solution trouvée ici: Supply some basic auth credentials to a WebView?

+0

Merci les gars pour la réponse rapide. Corrigez-moi si je me trompe, mais wail webview.setHttpAuthUsernamePassword (hôte, domaine, nom d'utilisateur, mot de passe); exige que je prédéfinis le nom d'utilisateur et mot de passe dans le code? J'essayais de comprendre comment faire apparaître l'application un nom d'utilisateur/boîte de connexion comme le navigateur par défaut .. – Kyle

+0

ok .. va ajouter à expliquer comment faire cela dans mon post ici .. juste une seconde. –

+0

Merci encore! Je reçois toujours le 401, mais je vais continuer à essayer de le faire fonctionner. – Kyle

19

Je pense une solution plus élégante que celle de Patrick décrit serait d'utiliser la méthode onReceivedHttpAuthRequest de WebViewClient comme décrit ici: 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"); 
} 

Je pense il est utile à propos de l'erreur 401 sur WebView.

+2

J'ai essayé cette méthode et ça a fini dans le pétrin. Je décourage fortement l'utilisation de cette méthode. Si vous fournissez un nom d'utilisateur ou un mot de passe incorrect, l'authentification échoue et Webview continue de réessayer pour l'authentification. Cela créait des appels api répétés sur mon serveur, ce qui a fini par arrêter le serveur. Vous pouvez envisager d'utiliser une méthode counter et stopLoading() pour éviter une boucle infinie. –

Questions connexes