web-dev-qa-db-ja.com

WebViewにないときにAndroidのWebViewのCookieとキャッシュをクリアする方法は?

ユーザーが私のアプリからサインアウトすると、次のメソッドを呼び出して、以前にキャッシュされた可能性のあるすべてを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とキャッシュをクリアするにはどうすればよいでしょうか?

49
JohnRock

私はアプリで次のアプローチを使用します。

    @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でテストしました。

107
AdamVe

作業とテスト..

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();
18

私はこれを使用しています...

public static void clearCache() {
    new WebView(getApplicationContext()).clearCache(true);
}

UIスレッドで呼び出すと、例外が発生することに注意してください。

3
Pollizzio

私はちょうど同じ問題を抱えていました。古いcookieを保持したくなく、廃止されたメソッドを使用したくないため、すべてのcookieを削除する必要がありました。

ここにドキュメント:

http://developer.Android.com/reference/Android/webkit/CookieManager.html

そして、ここでメソッド:

public abstract void removeAllCookies(ValueCallbackコールバック)

あなたの場合:

cookieManager.removeAllCookies(null);

仕事をする必要があります。 「null」で動作しない場合は、コールバックを使用する必要があります* ...

最終的にあなたはここで答えを見つけるかもしれません: Android WebView Cookie Problem

お役に立てれば。乾杯

3
firepol