Indrek Kõue
Indrek Kõue

Reputation: 6449

CookieManager and CookieSyncManager not syncing cookies to webview in ICS (works on all previous API levels)

Background:

I'm acquireing cookies through my app and use them internally by making requests to http. Users can switch to webview any given time, in which case I sync/inject cookies to webView.

Code for synchronizing cookies to webview using CookieSyncManager:

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

This works on all API levels except API 15+ (Android 4.0, Ice Cream Sandwich). The CookieManager API is not deprecated.

What is causing this problem and are there any workarounds?

Upvotes: 17

Views: 9431

Answers (4)

V_Coder_Z
V_Coder_Z

Reputation: 100

Here is your answer : In ICs, can`t get cookie

Its the domain which is causing the issue.

for all version after 15+ you have to you have to use **.**domain.com , instead of domain.com.

Upvotes: 0

Ilya Gazman
Ilya Gazman

Reputation: 32221

You can try the Apache DefaultHttpClient to do this work for you, I don't think it been changed in Ice Cream Sandwich.

I found this sample, but there is lots more in here

Upvotes: 3

ozmike
ozmike

Reputation: 2788

I wasn't injecting cookie from the client, but i found ICS cookie weren't saving.

One work around is to use the local storage instead of cookies. You don't need a cookie sync manager. this works on ics and v2+ android.

In my case I didn't have a domain , so the above didn't seem relevant - I was using a local html file in the asset folder of the app.

this works on ics and v2 android

enjoy

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);
}

Upvotes: 0

TheVoid
TheVoid

Reputation: 89

I had the same problem recently which I found was my mistake. The problem was the way I set the domain (but it worked till API 15). Try to prefix the domain with the dot: ".company.com" instead of "company.com".

Upvotes: 4

Related Questions