2012-03-14 9 views
17

Tło:CookieManager i CookieSyncManager nie synchronizowania plików cookie do Webview w ICS (działa na wszystkich poprzednich poziomów API)

mam acquireing ciasteczek przez mojej aplikacji i korzystania z nich wewnętrznie poprzez żądania HTTP. Użytkownicy mogą przełączyć się na przeglądanie internetowe w dowolnym momencie, w takim przypadku mogę zsynchronizować/wstrzyknąć pliki cookie do webView.

Kod do synchronizowania plików cookie do Webview użyciu CookieSyncManager:

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

Działa to na wszystkich poziomów API wyjątkiem API 15+ (Android 4.0 Ice Cream Sandwich). Interfejs API CookieManager nie jest przestarzały.

Co jest przyczyną tego problemu i czy istnieją jakieś obejścia?

+0

brak błędów logcat? – TryTryAgain

+0

Nie, żadne błędy nie są rejestrowane. –

+0

ma ten sam problem! WAAAA –

Odpowiedz

3

Możesz wypróbować Apache DefaultHttpClient, aby wykonać tę pracę za ciebie, nie sądzę, żeby została zmieniona w Ice Cream Sandwich.

Znalazłem sample, ale jest dużo więcej tutaj

+1

Mogłoby to rzeczywiście działać ... Przesłonięcie 'WebViewClient.shouldOverrideUrlLoading' w celu użycia' Apache DedfaultHttpClient' w celu pobrania strony internetowej za pomocą plików cookie i wprowadzenia kodu HTML do widoku web za pomocą 'webView.loadData' (co oznacza, że ​​obsługujesz całą logikę, a przeglądarka jest używana tylko do wyświetlania/renderowania HTML) –

+0

Twój link jest martwy – Beuj

+0

@Beuj znalazł inny –

4

miałem ten sam problem, który niedawno znalazłem był mój błąd. Problem polegał na tym, że ustawiłem domenę (ale działało to do API 15). Spróbuj przedrostkiem domeny z kropką: ".company.com" zamiast "company.com".

+1

To zadziałało, ale odkryłem, że spowodowało ten sam problem na odwrocie - to " d pracować w ICS, a nie w pre-ICS. Musiałem szybko wykonać polecenie "else", aby użyć ".domain.com", jeśli aplikacja była uruchomiona na Ice Cream Sandwich, a "domain.com", jeśli nie. Dziwne. – Mike

+1

Po wypróbowaniu wielu różnych sposobów, w końcu zadziałało dla mnie poprzez dodanie kropki przed domeną cookieManager.setCookie ("." + Domena, ciasteczko); – Ashok

+0

Co zawiera zmienna domeny? – Skynet

0

Nie robiłem ciasteczka od klienta, ale znalazłem ICS cookie nie zapisując.

Jedną z nich jest , aby korzystać z lokalnego magazynu zamiast plików cookie. Nie potrzebujesz menedżera synchronizacji plików cookie. to działa na ics i v2 + android.

W moim przypadku nie miałem domeny, więc powyższe nie wydawało się istotne - Korzystałem z lokalnego pliku html w folderze zasobów aplikacji.

to działa na ICS i v2 android

cieszyć

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

Tutaj jest odpowiedź: In ICs, can`t get cookie

Jest to domena, która powoduje problem.

dla wszystkich wersji po 15 lub więcej musisz użyć **. ** domain.com, zamiast domain.com.

Powiązane problemy