2012-03-14 2 views
17

фона:CookieManager и CookieSyncManager не синхронизируется куки WebView в ICS (работает на всех предыдущих уровнях API)

Я acquireing печенье через мое приложение и использовать их внутри страны, делая запросы HTTP. Пользователи могут переключаться на веб-просмотр в любое время, и в этом случае я синхронизую/добавляю файлы cookie в webView.

Код для синхронизации куки WebView с использованием CookieSyncManager:

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

Это работает на всех уровней API кроме API 15+ (Android 4.0 Ice Cream Sandwich). API CookieManager не устарел.

В чем причина этой проблемы и есть ли какие-либо обходные пути?

+0

no logcat errors? – TryTryAgain

+0

Нет, ошибки не регистрируются. –

+0

получил ту же проблему! WAAAA –

ответ

3

Вы можете попробовать Apache DefaultHttpClient для выполнения этой работы для вас, я не думаю, что это было изменено в Ice Cream Sandwich.

Я нашел этот sample, но есть много больше здесь

+1

Это действительно может работать ... Переопределение «WebViewClient.shouldOverrideUrlLoading» для использования «Apache DedfaultHttpClient» для получения веб-страницы с использованием файлов cookie и ввода HTML в webview с помощью webView.loadData' (то есть, вы обрабатываете всю логику, а webview используется только для отображения/рендеринга HTML) –

+0

ваша ссылка мертва – Beuj

+0

@Beuj нашел еще один –

4

У меня была та же проблема, в последнее время, которое я нашел, было моей ошибкой. Проблема заключалась в том, как я установил домен (но он работал до API 15). Попробуйте префикс домена с точкой: «.company.com» вместо «company.com».

+1

Это сработало, но я обнаружил, что это вызвало ту же проблему в обратном порядке - d работать в ICS, а не до ICS. Я должен был быстро использовать «.domain.com», если приложение работает на Ice Cream Sandwich и «domain.com», если нет. Странный. – Mike

+1

После того, как попробовал много разных способов, в конечном итоге работал для меня, просто добавив точку до домена cookieManager.setCookie («.» + Domain, cookie); – Ashok

+0

Что содержит переменная домена? – Skynet

0

Я не впрыскивал cookie с клиента, но я нашел ICS cookie не сохранялся.

Одна работа вокруг - это , чтобы использовать локальное хранилище вместо файлов cookie. Вам не нужен менеджер синхронизации файлов cookie. работает на ics и v2 + android.

В моем случае у меня не было домена, поэтому приведенное выше не было релевантным - Я использовал локальный html-файл в папке с ресурсами приложения.

это работает на микросхемах и v2 андроида

наслаждаться

ява

// 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

Вот ваш ответ: In ICs, can`t get cookie

Это домен, который вызывает проблему.

для всех версий после 15+ вам придется использовать **. ** domain.com, а не domain.com.

Смежные вопросы