Reputation: 6449
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
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
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
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
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