基本認証を使用してサーバーで認証するアプリを作成しました。ただし、資格情報を消去できないため、未解決の問題が 2 つあります。
- ユーザーはプログラムを終了しないとログアウトできません
- ユーザーが資格情報を間違って入力した場合、プログラムを終了して再入力する必要があります
私は自分自身でさまざまな実装を試しましたが、その多くがこの Web サイトで推奨されています。freenode で #android-dev をキャンプアウトしましたが、役に立ちませんでした。これが私の最後の選択肢です。
WebView のコード例を次に示します (いくつかのものを取り出しましたが、基本的なコードは基本的に同じです)。
wv = new WebView(getBaseContext());
wv.setWebViewClient(new WebViewClient() {
boolean error = false;
int count = 0;
int checked = 0;
@Override
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
count++;
if (count >= 3) {
Toast.makeText(getBaseContext(), "Login Failed. Please Try Again.", Toast.LENGTH_LONG).show();
} else {
handler.proceed(getUser(), getPass());
}// end else
}// end onReceivedHttpAuthRequest
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
}// onPageStarted
// on success switch activities
@Override
public void onPageFinished(WebView view, String url) {
if (view.getTitle().equalsIgnoreCase("fooTitle")) {
// switch activities
Intent fooActivity = new Intent(getBaseContext(), fooActivity.class);
startActivity(fooActivity);
} else {
//failed
}// end else
}// end onPageFinished
});// end setWebViewCleint
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl(url);
初めて実行するときだけ、onReceivedHttpAuthRequest が実行されます。ログアウトして再度ログインすると、onPageStarted が実行されてから、以前の資格情報で onPageFinished が実行されます。したがって、ログアウトして新しいユーザーを入力すると、元のユーザーで再度ログインします。または、間違ったユーザー名とパスワードを入力すると、OnPageStarted でハングアップします。私は onReceivedError と http エラー 1 を使用してみましたが、何のメリットもありません。
これは、 logout() メソッドを使用して認証解除しようとしたコードの一部であり、コードの他の部分でも同様です。私もこれのさまざまなバリエーションを試しました:
wv.clearCache(true);
wv.setHttpAuthUsernamePassword(host, realm, "","");
clearCacheFolder(this.getCacheDir());
clearCacheFolder(this.getExternalCacheDir());
this.getBaseContext().deleteDatabase("webview.db");
this.getBaseContext().deleteDatabase("webviewCache.db");
WebViewDatabase.getInstance(getBaseContext()).clearHttpAuthUsernamePassword();
WebViewDatabase.getInstance(getBaseContext()).clearUsernamePassword();
WebViewDatabase.getInstance(getBaseContext()).clearFormData();
WebStorage.getInstance().deleteAllData();
wv.setHttpAuthUsernamePassword(host, realm,
username, password);
ClearCacheFolder は、ここに投稿された markjan メソッドを参照します: Android Webview - 完全にキャッシュをクリアする