¿Cómo borrar las cookies y el caché de la vista web en Android cuando no está en la vista web?

Al cerrar la sesión de un usuario desde mi aplicación, borro todo lo que puede haberse almacenado previamente en la vista web llamando a este método:

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á marcado como obsoleto, sin embargo. Sin embargo, es necesario llamar a CookieSyncManager.createInstance (contexto) si no ha cargado previamente la vista web. Entonces, ¿cómo se supone que debemos borrar las cookies y la memoria caché sin usar el CookieSyncManager obsoleto en los casos en que la vista web no se haya cargado previamente?

Uso el siguiente enfoque en mi aplicación:

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

Llamo a este método de la siguiente manera desde mi fragmento:

 mWebView.clearCache(true); mWebView.clearHistory(); U.clearCookies(getActivity()); mWebView.loadUrl(authorizeURL); 

Es posible descargar las cookies de un dominio antes y después de la llamada a clearCookies por

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

Después de llamar a clearCookies yahooCookies será null .

Esta implementación alimenta mis necesidades, la he probado en varios emuladores y un Samsung Galaxy Gio prehistórico con Android 2.3.3 y Nexus 5 con Android 5.1.1.

Trabajando y probando …

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

Estoy usando esto …

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

Tenga cuidado de llamarlo en un subproceso de interfaz de usuario, de lo contrario obtendrá una excepción.

Acabo de tener el mismo problema. Necesitaba eliminar todas las cookies porque no quería mantener las antiguas y no quería usar el método obsoleto.

Aquí la documentación:

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

Y aquí el método:

vacío de resumen público removeAllCookies (callback de ValueCallback)

En tu caso:

 cookieManager.removeAllCookies(null); 

debería hacer el trabajo. Si con “nulo” no funciona, entonces tiene que usar una callback * …

Eventualmente, puede encontrar una respuesta aquí: problema de cookies de Android WebView

Espero que esto ayude. Aclamaciones