2012-03-14 4 views
17

Background:CookieManager e CookieSyncManager non la sincronizzazione di cookies per la WebView in ICS (funziona su tutti i livelli di API precedenti)

sto acquireing i cookie attraverso il mio app e li usa internamente da fare richieste http. Gli utenti possono passare alla visualizzazione Web in qualsiasi momento, nel qual caso sincronizzo/inietto i cookie a webView.

codice per sincronizzare i cookie per WebView utilizzando CookieSyncManager:

CookieSyncManager.createInstance(a); 
CookieManager cm = CookieManager.getInstance(); 
cm.setCookie(domain, cookieName + "=" + cookieValue); 
CookieSyncManager.getInstance().sync(); 

Questo funziona su tutti i livelli di API tranne API 15+ (Android 4.0, Ice Cream Sandwich). L'API CookieManager non è deprecata.

Che cosa sta causando questo problema e ci sono soluzioni alternative?

+0

no errori logcat? – TryTryAgain

+0

No, non vengono registrati errori. –

+0

ha avuto lo stesso problema! WAAAA –

risposta

3

È possibile provare Apache DefaultHttpClient per fare questo lavoro per voi, non credo sia stato cambiato in Ice Cream Sandwich.

ho trovato questo sample, ma c'è molto di più qui

+1

Questo potrebbe funzionare ... Sovrascrivere 'WebViewClient.shouldOverrideUrlLoading' per usare' Apache DedfaultHttpClient' per acquisire pagine web usando i cookie e iniettare l'HTML in webview con 'webView.loadData' (ovvero, gestisci tutta la logica e la webview è usata solo per visualizzare/rendering HTML) –

+0

il tuo link è morto – Beuj

+0

@Beuj ne trova un altro –

4

Ho avuto lo stesso problema da poco, che ho trovato è stato il mio errore. Il problema era il modo in cui ho impostato il dominio (ma ha funzionato fino all'API 15). Prova a inserire il prefisso del dominio con il punto: ".company.com" anziché "company.com".

+1

Questo ha funzionato, ma ho scoperto che ha causato lo stesso problema in senso inverso - it ' lavoro in ICS e non pre-ICS. Ho dovuto fare un breve se-else per utilizzare ".dominio.com" se l'app era in esecuzione su Ice Cream Sandwich e "dominio.com" in caso contrario. Strano. – Mike

+1

Dopo diversi tentativi, ho lavorato per me aggiungendo un punto prima del cookie cookieManager.setCookie ("." + Dominio, cookie); – Ashok

+0

Cosa contiene la variabile dominio? – Skynet

0

Non stavo iniettando cookie dal client, ma ho trovato che il cookie ICS non stava salvando.

Una soluzione è per utilizzare la memoria locale invece dei cookie. Non hai bisogno di un gestore di sincronizzazione dei cookie. funziona su ics e v2 + android.

Nel mio caso non avevo un dominio, quindi quanto sopra non sembrava rilevante - Stavo usando un file html locale nella cartella delle risorse dell'app.

questo funziona su ics e v2 Android

godere

java

// java 
WebSettings webSettings = myWebView.getSettings(); 
webSettings.setDomStorageEnabled(true); // localStorage 


// e.g., if your package is www.myapp.whatever; 
webSettings.setDatabasePath("/data/data/www.myapp.whatever/databases/"); 

html

// javascript 

function createCookie(name,value,days,path) { 
    localStorage.setItem(name,value); 
} 

function readCookie(name) { 
    return localStorage.getItem(name); 
} 
0

qui è la vostra risposta: In ICs, can`t get cookie

È il dominio che causa il problema.

per tutte le versioni successive a 15+ è necessario utilizzare **. ** dominio.com, invece di dominio.com.

Problemi correlati