J'utilise un Android WebView pour Twitter OAuth : Twitter demande à l'utilisateur de se connecter et d'autoriser l'application, je récupère le jeton d'accès et le persiste dans mon application.
Je n'ai pas besoin (et je ne stocke pas) le mot de passe de l'utilisateur, mais WebView conserve les cookies de Twitter et il demande également à l'utilisateur s'il souhaite qu'il se souvienne du mot de passe. En conséquence, même après que la demande a été retirée de l'autorisation via sa page de compte Twitter, et que mon application détruit les jetons d'accès, la prochaine fois que WebView sera ouverte, elle sera probablement toujours connectée, et même si ce n'est pas le cas, elle a la boîte de mot de passe déjà remplie.
Comment puis-je forcer WebView à ne pas demander de se souvenir des mots de passe et à ne pas conserver les cookies de session? Si ce n'est pas possible, puis-je supprimer tout son état stocké (sauf peut-être le cache d'image)?
Vous pouvez l'utiliser pour empêcher le stockage des cookies et nettoyer les cookies déjà stockés:
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)
Pour ne pas enregistrer les mots de passe:
WebView webview = new WebView(this);
WebSettings mWebSettings = webview.getSettings();
mWebSettings.setSavePassword(false);
mWebSettings.setSaveFormData(false);
Pour les cookies:
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);
Je ne suis pas très sûr de l'implémentation des cookies.
En une ligne, essayez ceci. Je pense que cela devrait être appelé après le démarrage de la vue Web.
Android.webkit.CookieManager.getInstance().removeAllCookie();
C'est la meilleure réponse que j'ai vue dans ce contexte
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();
}
N'effacez pas les cookies car cela affectera d'autres sessions comme Facebook, etc. stockées à l'intérieur du cookie, essayez donc de suivre cette méthode
Avant oauth transaction comme avant la création de la vue Web
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);
Après oauth transaction laissez accepter le cookie en définissant
cookieManager.setAcceptCookie(true);
ça marchera je l'ai testé ..
J'ai utilisé la solution suivante:
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(false);
La méthode suivante ne fonctionne pas pour moi:
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
Une raison possible peut être que nous n'avons pas synchronisé les cookies comme suit:
CookieSyncManager.createInstance(getContext()).sync();
Mais cela peut prendre du temps.
Forcer WebView
à ne pas demander de se souvenir des mots de passe ne fonctionnera pas non plus.
Et ce n'est pas non plus bon pour la convivialité.