Сделать Android WebView не хранить файлы cookie или пароли
Я использую Android WebView для Twitter OAuth: Twitter просит пользователя войти в систему и авторизировать приложение, я получаю токен доступа и сохраняю его в своем приложении.
Мне не нужно (и не нужно) хранить пароль пользователя, но WebView хранит файлы cookie Twitter, а также спрашивает пользователя, хочет ли он, чтобы он помнил пароль. В результате этого даже после отмены авторизации приложения через его страницу учетной записи Twitter, и мое приложение уничтожает токены доступа, при следующем открытии WebView он, вероятно, все еще регистрируется, и даже если нет, он имеет поле пароля уже заполнено.
Как заставить WebView не запрашивать пароли и не сохранять cookie сеанса?
Если это невозможно, могу ли я удалить все его сохраненное состояние (кроме, возможно, кеша изображения)?
Ответы
Ответ 1
Вы можете использовать это для предотвращения сохранения файлов cookie и очистки уже сохраненных файлов:
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)
Ответ 2
Для сохранения паролей:
WebView webview = new WebView(this);
WebSettings mWebSettings = webview.getSettings();
mWebSettings.setSavePassword(false);
mWebSettings.setSaveFormData(false);
Для файлов cookie:
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);
Я не очень уверен в реализации файлов cookie.
Ответ 3
В одной строке попробуйте это. Я думаю, что это нужно вызвать после запуска веб-просмотра.
android.webkit.CookieManager.getInstance().removeAllCookie();
Ответ 4
Это лучший ответ, который я видел в этом контексте
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();
}
Ответ 5
Я использовал следующее решение:
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);
Следующий метод не сработал у меня:
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
Возможная причина может заключаться в том, что мы не синхронизировали файлы cookie следующим образом:
CookieSyncManager.createInstance(getContext()).sync();
Но это может занять время.
Принуждение WebView
не запрашивать запоминание паролей также не будет работать.
И это также плохо для удобства использования.
Ответ 6
Не очищать файлы cookie, поскольку он будет влиять на другие сеансы, такие как facebook и т.д., хранящиеся внутри файла cookie, поэтому попробуйте следовать этому методу
Перед транзакцией oauth, например, перед созданием веб-представления
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);
После транзакции oauth разрешите принимать cookie, установив
cookieManager.setAcceptCookie(true);
он будет работать, я его протестировал.