Hacer que Android WebView no almacene cookies o contraseñas

Uso un Android WebView para Twitter OAuth : Twitter le pide al usuario que inicie sesión y autorice la aplicación, recupero el token de acceso y lo conservo en mi aplicación.

No necesito (y no) almacenar la contraseña del usuario, pero WebView mantiene las cookies de Twitter, y también le pregunta al usuario si quiere que recuerde la contraseña. Como resultado de esto, incluso después de que se desautoriza la aplicación a través de su página de cuenta de Twitter, y mi aplicación destruye los tokens de acceso, la próxima vez que se abra WebView, es probable que todavía esté conectado, y aunque no lo esté, tiene el cuadro de contraseña ya está lleno

¿Cómo puedo obligar a WebView a no recordar las contraseñas y no conservar las cookies de sesión? Si eso no es posible, ¿puedo borrar todo su estado almacenado (excepto tal vez el caché de imágenes)?

Puede usar esto para evitar que las cookies se almacenen y limpiar las cookies que ya están almacenadas:

CookieSyncManager.createInstance(this); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookies(callback); cookieManager.setAcceptCookie(false); WebView webview = new WebView(this); WebSettings ws = webview.getSettings(); ws.setSaveFormData(false); ws.setSavePassword(false); // Not needed for API level 18 or greater (deprecated) 

Para no guardar contraseñas:

 WebView webview = new WebView(this); WebSettings mWebSettings = webview.getSettings(); mWebSettings.setSavePassword(false); mWebSettings.setSaveFormData(false); 

Para las cookies:

 CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(false); 

No estoy muy seguro de la implementación de cookies.

En una línea, prueba esto. Creo que esto debería llamarse después de comenzar la vista web.

 android.webkit.CookieManager.getInstance().removeAllCookie(); 

Esta es la mejor respuesta que he visto en este contexto

  webView.clearCache(true); webView.clearHistory(); WebSettings webSettings = webView.getSettings(); webSettings.setSaveFormData(false); webSettings.setSavePassword(false); // Not needed for API level 18 or greater (deprecated) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { CookieManager.getInstance().removeAllCookies(null); CookieManager.getInstance().flush(); } else { CookieSyncManager cookieSyncMngr = CookieSyncManager.createInstance(this); cookieSyncMngr.startSync(); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie(); cookieManager.removeSessionCookie(); cookieSyncMngr.stopSync(); cookieSyncMngr.sync(); } 

No borre las cookies porque afectarán a otras sesiones como Facebook, etc. almacenadas dentro de la cookie, así que intente seguir este método

Antes de una transacción oauth como antes de la creación de la vista web

 CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(false); 

Después de una transacción nueva, acepte la cookie configurando

 cookieManager.setAcceptCookie(true); 

funcionará lo he probado …

He usado la siguiente solución:

 CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(false); 

El siguiente método no funcionó para mí:

 CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie(); 

Una posible razón puede ser que no hayamos sincronizado las cookies de la siguiente manera:

 CookieSyncManager.createInstance(getContext()).sync(); 

Pero puede tomar tiempo.

Obligar a WebView a no pedir recordar las contraseñas tampoco funcionará.

Y tampoco es bueno para la usabilidad.