2017-06-02 3 views
0

Ich habe eine reine HTML + CSS + JS App, die ich über das Webview in eine Android App einbetten möchte. Die App funktioniert alles außer, die Cookies werden nicht gespeichert. Ich habe bereits versucht, die Vorschläge in dieser QA, aber keiner von ihnen scheint zu funktionieren:Cookies werden nicht in Android gespeichert. Webview

Make Android WebView not store cookies or passwords

Cookie doesn't work properly in webview in android

Webview cannot accept cookies

Android WebView HTTP Cookies not working in API 21

Dies ist, wie ich die WebView initiieren in meiner Tätigkeit:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    CookieManager cookieManager = CookieManager.getInstance(); 
    cookieManager.setAcceptCookie(true); 
    cookieManager.acceptCookie(); 
    cookieManager.setAcceptFileSchemeCookies(true); 

    WebView webView = (WebView) findViewById(R.id.webView1); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setDomStorageEnabled(true); 

    //webView.getSettings().setPluginState(PluginState.ON); 
    webView.getSettings().setAllowFileAccess(true); 
    webView.getSettings().setAllowContentAccess(true); 
    if (Build.VERSION.SDK_INT >= 16) { 
     webView.getSettings().setAllowFileAccessFromFileURLs(true); 
     webView.getSettings().setAllowUniversalAccessFromFileURLs(true); 
    } 

    webView.loadUrl("file:///android_asset/index.html"); 

} 

Und hier ist die JavaScript createCookie() Methode, die einwandfrei in einem normalen Browser funktioniert:

function createCookie(name, value, days) 
{ 
    value = value.replace(';', COOKIE_ENCODER); 

    if (days>=0) { 
     var date = new Date(); 
     date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 
     var expires = "; expires=" + date.toGMTString(); 
    } 
    //else var expires = ""; 


    document.cookie = name + "=" + value + expires; // + "; path=/"; 
} 

Ich habe auch versucht CookieSyncManager obwohl Android Studio vorgeschlagen mit, dass seine abgeschrieben. Wenn die createCookie()-Methode aufgerufen wird, zeigt die Konsole keine Fehler an, es speichert das Cookie nur nicht.

bearbeiten

Unten ist der Code für readCookie() Funktion, die das Cookie in JavaScript lesen verwendet wird. Ich denke, die genauso gut möglich, dass das Cookie gespeichert wird, aber die Browser-Probleme ist, die es beim Lesen zurück:

function readCookie(name) 
{ 
    //name = name.replace(';',COOKIE_ENCODER); 
    var nameEQ = name + "="; 
    var ca = document.cookie.split(';'); 
    for (var i = 0; i < ca.length; i++) { 
     var c = ca[i]; 
     while (c.charAt(0) == ' ') c = c.substring(1, c.length); 
     if (c.indexOf(nameEQ) == 0) 
     { 
      s = c.substring(nameEQ.length, c.length); 
      s = s.replace(COOKIE_ENCODER,';'); 
      return s; 
     } 
    } 
    return null; 
} 

Antwort

1

Sie window.localStorage anstelle von Cookies verwenden könnten. https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

+0

Danke, Greg. Ja, das habe ich eigentlich in meiner App gemacht, aber es muss auch eine Möglichkeit geben, Cookies zu speichern, da wir einen Webbrowser mit dem Webview emulieren wollen. –

+0

Haben Sie versucht, den CookieManager onPageFinished zu initialisieren, wie es für den veralteten CookieSyncManager empfohlen wurde? https://stackoverflow.com/questions/8390156/how-to-save-a-cookie-in-android-webview-forever –

+0

Ich tat, aber Android Studio sagt, dass 'CookieSyncManager' abgeschrieben wird. Aber ich habe es trotzdem gemacht und auch das hat nicht funktioniert (immer noch kein Cookie im Browser gespeichert). Außerdem habe ich die App sowohl auf meinem Gerät als auch auf meinem Emulator getestet. –

Verwandte Themen