Ik heb een applicatie op appspot die prima werkt via een gewone browser, maar bij gebruik via Android WebView kan het geen cookies instellen en lezen. Ik probeer geen cookies “buiten” deze webapplicatie te krijgen, als de URL eenmaal is bezocht door WebView, kunnen alle verwerkingen, id’s, enz. daar blijven, alles wat ik nodig heb is sessiebeheer binnen die applicatie. Eerste scherm laadt ook prima, dus ik weet dat WebView + serverinteractiviteit niet verbroken is.
Ik keek naar de WebSettings-klasse, er was geen oproep zoals setEnableCookies.
Ik laad de url als volgt:
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]);
}
..
}
Enig idee?
Antwoord 1, autoriteit 100%
Als je Android Lollipop gebruikt, d.w.z. SDK 21, dan:
CookieManager.getInstance().setAcceptCookie(true);
werkt niet. U moet het volgende gebruiken:
CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
Ik kwam hetzelfde probleem tegen en de bovenstaande regel werkte als een charme.
Antwoord 2, autoriteit 47%
Van de Android-documentatie:
De
CookieSyncManager
wordt gebruikt om de browsercookie te synchroniseren
opslaan tussen RAM en permanente opslag. Om de beste prestaties te krijgen,
browsercookies worden in het RAM opgeslagen. Een apart draadje slaat de cookies op
tussen, aangedreven door een timer.Om de
CookieSyncManager
te gebruiken, moet de hosttoepassing de . aanroepen
volgende wanneer de applicatie start:CookieSyncManager.createInstance(context)
Om synchronisatie in te stellen, moet de hosttoepassing bellen
CookieSyncManager.getInstance().startSync()
in Activity.onResume(), en bel
CookieSyncManager.getInstance().stopSync()
in Activity.onPause().
Als u directe synchronisatie wilt krijgen in plaats van te wachten tot de timer wordt geactiveerd, is de
host kan bellenCookieSyncManager.getInstance().sync()
Het synchronisatie-interval is 5 minuten, dus u zult synchronisaties willen forceren
toch handmatig, bijvoorbeeld in onPageFinished(WebView, String). Opmerking
dat zelfs sync() asynchroon gebeurt, dus doe het niet zoals je
activiteit wordt afgesloten.
Eindelijk zou zoiets als dit moeten werken:
// 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]);
Antwoord 3, autoriteit 39%
Ik heb ontdekt wat er aan de hand is.
Als ik een pagina laad via een server-side actie (een url-bezoek), en de html bekijk die door die actie in een webview wordt geretourneerd, wordt die eerste actie/pagina binnen die webview uitgevoerd. Wanneer u echter op een link klikt die actieopdrachten zijn in uw web-app, starten deze acties een nieuwe browser. Daarom gaat cookie-informatie verloren omdat de eerste cookie-informatie die u voor Webview instelt, is verdwenen, we hebben hier een apart programma.
U moet klikken op Webview onderscheppen, zodat browsen de app nooit verlaat, alles blijft in dezelfde Webview.
WebView webview = new WebView(this);
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url); //this is controversial - see comments and other answers
return true;
}
});
setContentView(webview);
webview.loadUrl([MY URL]);
Dit lost het probleem op.
Antwoord 4, autoriteit 8%
Mijn probleem is dat cookies niet “binnen” dezelfde sessie werken. –
Burak: Ik had hetzelfde probleem. Het inschakelen van cookies loste het probleem op.
CookieManager.getInstance().setAcceptCookie(true);
Antwoord 5
CookieManager.getInstance().setAcceptCookie(true);
Normaal gesproken zou het moeten werken als uw webview al is geïnitialiseerd
of probeer dit:
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
cookieManager.setAcceptCookie(true);