Comment effacer les cookies et le cache de Webview sur Android quand ils ne sont pas dans WebView?

Lors de la déconnexion d’un utilisateur de mon application, j’efface tout ce qui peut avoir été mis en cache auparavant dans la vue Web en appelant cette méthode:

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 marqué comme obsolète, cependant. CookieSyncManager.createInstance (context) doit cependant être appelé si vous n’avez pas déjà chargé la webview. Alors, comment pouvons-nous effacer les cookies et le cache sans utiliser CookieSyncManager obsolète dans les cas où la vue Web n’a peut-être pas déjà été chargée?

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 >=" + Ssortingng.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 pour un domaine avant et après l'appel à clearCookies par

 Ssortingng 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 alimente mes besoins, je l'ai testée sur plusieurs émulateurs et sur un Samsung Galaxy Gio préhistorique avec Android 2.3.3 et Nexus 5 avec Android 5.1.1.

Travailler et testé ..

 android.webkit.CookieManager cookieManager = CookieManager.getInstance(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { cookieManager.removeAllCookies(new ValueCallback() { // 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(); 

J’utilise ça …

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

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

J’ai juste eu le même problème. J’avais besoin de 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 CallCallback)

Dans ton cas:

 cookieManager.removeAllCookies(null); 

devrait faire le travail Si avec “null” ça ne marche pas, alors vous devez utiliser un callback * …

Finalement, vous pouvez trouver une réponse ici: Android WebView Cookie Problem

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