WebView et Cookies sur Android

J’ai une application sur appspot qui fonctionne bien avec un navigateur classique, mais lorsqu’elle est utilisée via Android WebView, elle ne peut pas définir et lire les cookies. Je n’essaie pas d’obtenir des cookies “en dehors” de cette application Web BTW, une fois que l’URL est visitée par WebView, tous les traitements, identifiants, etc. peuvent y restr, tout ce dont j’ai besoin Le premier écran se charge également très bien, donc je sais que l’interactivité du serveur WebView + n’est pas rompue.

J’ai regardé la classe WebSettings, il n’y avait pas d’appel comme setEnableCookies.

Je charge l’URL comme ceci:

public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WebView webview = new WebView(this); setContentView(webview); webview.loadUrl([MY URL]); } .. } 

Des idées?

Si vous utilisez Android Lollipop, à savoir le SDK 21, alors:

 CookieManager.getInstance().setAcceptCookie(true); 

ne marchera pas Vous devez utiliser:

 CookieManager.getInstance().setAcceptThirdPartyCookies(true); 

J’ai rencontré le même problème et la ligne ci-dessus a fonctionné comme un charme.

De la documentation Android :

CookieSyncManager est utilisé pour synchroniser le magasin de cookies du navigateur entre la mémoire vive et le stockage permanent. Pour obtenir les meilleures performances, les cookies du navigateur sont enregistrés dans la RAM. Un thread séparé enregistre les cookies, pilotés par une timer.

Pour utiliser CookieSyncManager , l’application hôte doit appeler les éléments suivants au démarrage de l’application:

 CookieSyncManager.createInstance(context) 

Pour configurer la synchronisation, l’application hôte doit appeler

 CookieSyncManager.getInstance().startSync() 

dans Activity.onResume (), et appelez

  CookieSyncManager.getInstance().stopSync() 

dans Activity.onPause ().

Pour obtenir une synchronisation instantanée au lieu d’attendre que le temporisateur se déclenche, l’hôte peut appeler

 CookieSyncManager.getInstance().sync() 

L’intervalle de synchronisation est de 5 minutes, vous devez donc forcer les synchronisations manuellement, par exemple dans onPageFinished (WebView, Ssortingng). Notez que même la synchronisation () se produit de manière asynchrone, alors ne le faites pas au moment où votre activité est en cours d’arrêt.

Enfin, quelque chose comme ça devrait fonctionner:

 // use cookies to remember a logged in status CookieSyncManager.createInstance(this); CookieSyncManager.getInstance().startSync(); WebView webview = new WebView(this); webview.getSettings().setJavaScriptEnabled(true); setContentView(webview); webview.loadUrl([MY URL]); 

J’ai compris ce qui se passe.

Lorsque je charge une page via une action côté serveur (une visite d’URL) et que je visualise le fichier HTML renvoyé par cette action dans une vue Web, cette première action / page est exécutée dans cette vue Web. Cependant, lorsque vous cliquez sur un lien qui est une commande d’action dans votre application Web, ces actions lancent un nouveau navigateur . C’est la raison pour laquelle les informations sur les cookies sont perdues car les premières informations de cookie que vous avez définies pour Webview ont disparu, nous avons un programme séparé ici.

Vous devez intercepter les clics sur Webview pour que la navigation ne quitte jamais l’application, tout rest dans la même Webview.

  WebView webview = new WebView(this); webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, Ssortingng url) { view.loadUrl(url); //this is controversial - see comments and other answers return true; } }); setContentView(webview); webview.loadUrl([MY URL]); 

Cela corrige le problème.

Mon problème est que les cookies ne fonctionnent pas “dans” la même session. –

Burak: J’ai eu le même problème. L’activation des cookies a résolu le problème.

 CookieManager.getInstance().setAcceptCookie(true); 

CookieManager.getInstance().setAcceptCookie(true); Normalement, cela devrait fonctionner si votre webview est déjà initialisée

ou essayez ceci:

 CookieSyncManager.createInstance(this); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie(); cookieManager.setAcceptCookie(true);