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