web-dev-qa-db-fra.com

Comment effacer les cookies et le cache de la vue Web sur Android en dehors de la vue Web?

Lorsque l'utilisateur se déconnecte de mon application, j'appelle cette méthode pour effacer tout ce qui a peut-être déjà été mis en cache de la vue 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 est toutefois marqué comme obsolète. CookieSyncManager.createInstance (context) doit être appelé, toutefois, si vous n'avez pas chargé la vue Web auparavant. Alors, comment pouvons-nous effacer les cookies et le cache sans utiliser le CookieSyncManager obsolète dans les cas où la vue Web n'a peut-être pas été chargée auparavant?

49
JohnRock

J'utilise l'approche suivante dans mon application:

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

J'appelle cette méthode de la manière suivante à partir de mon fragment:

mWebView.clearCache(true);
mWebView.clearHistory();

U.clearCookies(getActivity());

mWebView.loadUrl(authorizeURL);

Il est possible de vider les cookies d'un domaine avant et après l'appel à clearCookies en

String yahooCookies = CookieManager.getInstance().getCookie("https://yahoo.com");
Log.d(C.TAG, "Cookies for yahoo.com:" + yahooCookies);

Après avoir appelé clearCookies yahooCookies sera null.

Cette implémentation nourrit mes besoins, je l’ai testée sur plusieurs émulateurs et un Samsung Galaxy Gio préhistorique avec Android 2.3.3 et Nexus 5 avec Android 5.1.1 .

107
AdamVe

Travailler et tester ..

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
Gayan Weerakutti

J'utilise ça ...

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

Veillez à l'appeler sur un thread d'interface utilisateur, sinon vous obtiendrez une exception.

3
Pollizzio

Je viens d'avoir le même problème. Je devais supprimer tous les cookies car je ne voulais pas conserver les anciens et je ne voulais pas utiliser la méthode obsolète.

Voici la documentation:

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

Et voici la méthode:

public abstract void removeAllCookies (rappel ValueCallback)

Dans ton cas:

cookieManager.removeAllCookies(null);

devrait faire le travail. Si avec "null" cela ne fonctionne pas, alors vous devez utiliser un callback * ...

Vous pouvez éventuellement trouver une réponse ici: Problème de cookie Android WebView

J'espère que cela t'aides. À votre santé

3
firepol