ユーザーが私のアプリからサインアウトすると、次のメソッドを呼び出して、以前にキャッシュされた可能性のあるすべてをWebビューから消去します。
public void clearCookiesAndCache(Context context){
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
cookieManager.removeAllCookies(null);
}
else {
cookieManager.removeAllCookie();
}
}
ただし、CookieSyncManagerは非推奨としてマークされます。ただし、WebViewを以前にロードしていない場合は、CookieSyncManager.createInstance(context)を呼び出す必要があります。では、WebViewが以前にロードされていない可能性がある場合に、非推奨のCookieSyncManagerを使用せずにCookieとキャッシュをクリアするにはどうすればよいでしょうか?
私はアプリで次のアプローチを使用します。
@SuppressWarnings("deprecation")
public static void clearCookies(Context context)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop_MR1) {
Log.d(C.TAG, "Using clearCookies code for API >=" + String.valueOf(Build.VERSION_CODES.Lollipop_MR1));
CookieManager.getInstance().removeAllCookies(null);
CookieManager.getInstance().flush();
} else
{
Log.d(C.TAG, "Using clearCookies code for API <" + String.valueOf(Build.VERSION_CODES.Lollipop_MR1));
CookieSyncManager cookieSyncMngr=CookieSyncManager.createInstance(context);
cookieSyncMngr.startSync();
CookieManager cookieManager=CookieManager.getInstance();
cookieManager.removeAllCookie();
cookieManager.removeSessionCookie();
cookieSyncMngr.stopSync();
cookieSyncMngr.sync();
}
}
フラグメントから次の方法でこのメソッドを呼び出します。
mWebView.clearCache(true);
mWebView.clearHistory();
U.clearCookies(getActivity());
mWebView.loadUrl(authorizeURL);
clearCookies
への呼び出しの前後に、ドメインのCookieをダンプすることができます。
String yahooCookies = CookieManager.getInstance().getCookie("https://yahoo.com");
Log.d(C.TAG, "Cookies for yahoo.com:" + yahooCookies);
clearCookies
を呼び出した後、yahooCookiesはnull
になります。
この実装は私のニーズを満たし、いくつかのエミュレーターとAndroid 2.3.3を搭載した先史時代のSamsung Galaxy GioとAndroid 5.1.1を搭載したNexus 5でテストしました。
作業とテスト..
Android.webkit.CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
cookieManager.removeAllCookies(new ValueCallback<Boolean>() {
// a callback which is executed when the cookies have been removed
@Override
public void onReceiveValue(Boolean aBoolean) {
Log.d(TAG, "Cookie removed: " + aBoolean);
}
});
}
else cookieManager.removeAllCookie();
私はこれを使用しています...
public static void clearCache() {
new WebView(getApplicationContext()).clearCache(true);
}
UIスレッドで呼び出すと、例外が発生することに注意してください。
私はちょうど同じ問題を抱えていました。古いcookieを保持したくなく、廃止されたメソッドを使用したくないため、すべてのcookieを削除する必要がありました。
ここにドキュメント:
http://developer.Android.com/reference/Android/webkit/CookieManager.html
そして、ここでメソッド:
public abstract void removeAllCookies(ValueCallbackコールバック)
あなたの場合:
cookieManager.removeAllCookies(null);
仕事をする必要があります。 「null」で動作しない場合は、コールバックを使用する必要があります* ...
最終的にあなたはここで答えを見つけるかもしれません: Android WebView Cookie Problem
お役に立てれば。乾杯