I have build an application to load WebView with passing cookies.my application works fine in KitKat version of android.
but WebView is not loading in jelly bean or lower versions. that means my WebView is not passing cookies in jelly bean or lower versions.
Is this possible not to load WebView in lower android versions? If possible, then how to do it?
please guide me and help me.
Hear i store cookie in my activity.
CookieSyncManager.getInstance().startSync();
CookieSyncManager syncManager = CookieSyncManager.createInstance(MainActivity2.this);
syncManager.sync();
CookieManager manager = new CookieManager();
manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(manager);
CookieStore cookieJar = manager.getCookieStore();
cookies1 = cookieJar.getCookies();
editor.putString("coockies", String.valueOf(cookies1));
//List<Cookie> cookies = httpclient.getCookieStore().getCookies();
for (int i = 0; i < cookies1.size(); i++) {
cookie = cookies1.get(i);
Log.d("cookie", String.valueOf(cookie));
}
and hear i pass cookie in webview
enter code here wv = new WebView(this);
wv=(WebView)findViewById(R.id.webView);
HttpCookie sessionCookie = myactivity.cookie;
Log.d("Session Coockies",String.valueOf(sessionCookie));
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
if (sessionCookie != null) {
cookieManager.removeSessionCookie();
String cookieString = sessionCookie.getName() + "=" + sessionCookie.getValue() + "; domain=" + sessionCookie.getDomain();
Log.d("cookistring",cookieString);
cookieManager.setCookie("", cookieString);
CookieSyncManager.getInstance().sync();
// String cookieString = sessionCookie.getName() + "=" + sessionCookie.getValue() + ";domain=";
}
wv.getSettings().setLoadsImagesAutomatically(true);
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setDomStorageEnabled(true);
wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
//setContentView(myWebView);
String url="my url";
Log.d("url",url);
wv.loadUrl(url);
Related
I am calling a service to get Cookies as a JSONArray that looks like this
{"domain":"blabla.com","expirationDate":1896127200,"hostOnly":false,"httpOnly":false,"name":"__ssid","path":"\/","sameSite":"no_restriction","secure":false,"session":false,"storeId":"0","value":"392997aa-ce67-4d96-a73d-de0ad794f7bf","id":1}
then parsing these cookies like this
Cookie cookie = new Cookie.Builder()
.domain(checkDomain(jsonObject.optString("domain")))
.expiresAt(jsonObject.optLong("expirationDate"))
.name(jsonObject.optString("name"))
.path(jsonObject.optString("path"))
.value(jsonObject.optString("value"))
.build();
then injecting the cookies like this
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cookieManager.setAcceptThirdPartyCookies(webView, true);
} else {
cookieManager.setAcceptCookie(true);
}
cookieManager.removeAllCookie();
if (cookies != null) {
for (Cookie cookie : cookies) {
String cookieString = cookie.name() + "=" + cookie.value() + "; domain=" + cookie.domain();
cookieManager.setCookie(cookie.domain(), cookieString);
CookieSyncManager.getInstance().sync();
}
}
but when i load https://blabla.com into the WebView cookies are not working, am i missing anything?
Please help
This is what I worked with, it works perfectly fine:
CookieManager.getInstance().setCookie(treeUrl, cookieString);
CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
webView.loadUrl("www.example.com");
If you have to inject a JSON to cookies, just use yourJson.toString()
You can use the below code to set cookies.
web_view = findViewById(R.id.web_view);
CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(web_view.getContext());
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();
cookieManager.setCookie(URL,"uniqueId=10028; Domain=.codean.app");
cookieSyncManager.sync();
String cookie = cookieManager.getCookie(URL);
Log.e(TAG, ""+cookie);
web_view.getSettings().setJavaScriptEnabled(true);
web_view.setWebViewClient(new WebViewClient());
web_view.loadUrl(URL);
Output:
2019-09-16 15:20:21.412 31408-31408/com.sam.webviewtest E/MainActivity: uniqueId=10028
2019-09-16 15:20:22.204 31408-31408/com.sam.webviewtest E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
2019-09-16 15:20:22.205 31408-31408/com.sam.webviewtest E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
For testing purpose, you can use below url
https://codean.app/so/cookies.php
in this php file, it only output all the cookies
<pre><?php print_r( $_COOKIE ); ?></pre>
I've used the same url in my above example,
Please try this one:
private fun setCookie(){
val cookieManager = CookieManager.getInstance()
cookieManager.acceptCookie()
val domain = "https://www.yourdomain.com"
webView.webViewClient = WebViewClient()
webViewTest.settings.javaScriptEnabled = true
webViewTest.loadUrl(domain)
cookieManager.setCookie(domain,"$cookieKey=$cookieValue")
cookieManager.setAcceptThirdPartyCookies(view.webViewTest,true)
}
I have the following code:
String cookieString = "sessionid=;";
CookieManager c = CookieManager.getInstance();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
c.setCookie("https://my.url.com/someotherstuff", cookieString);
Log.v("Cookies: ", c.getCookie("https://my.url.com/someotherstuff"));
}
Instead of replacing "sessionid" cookie the output is as such:
Cookies:: sessionid=; sessionid=someIDNumber; csrftoken=someOtherIDNumber
So it is adding a new sessionid?
Anyone have a solution for this?
I am facing issues with setting cookie in Android WebView. I am using the following code:
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeAllCookie();
cookieManager.setAcceptCookie(true);
cookieManager.setCookie(url, cookie);
CookieSyncManager.getInstance().sync();
But it's not working. I also tried by adding headers using WebView's loadUrl(String url, Map<String, String> additionalHttpHeaders) method; but still it's not working. Is there a way to do this?
Please try this
Cookie sessionCookie = LoginWebView.cookie;
CookieSyncManager.createInstance(webview.this);
CookieManager cookieManager = CookieManager.getInstance();
if (sessionCookie != null) {
cookieManager.removeSessionCookie();
String cookieString = sessionCookie.getName();
Log.v(TAG, "sync cookies: " + cookieString);
cookieManager.setCookie(domain, cookieString);
CookieSyncManager.getInstance().sync();
}
The CookieSyncManager is deprecated now, instead use cookieManager.flush(); to update.
See this: http://developer.android.com/intl/es/reference/android/webkit/CookieSyncManager.html
I am trying to set cookie using API CookieManager in webview for sencha page.
CookieSyncManager.createInstance(this);
cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.setCookie(domain, cookie);
But session is not reflecting when page is loading in webview.
This is a working bit of code.
private void setCookie(DefaultHttpClient httpClient, String url) {
List<Cookie> cookies = httpClient.getCookieStore().getCookies();
if (cookies != null) {
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
for (int i = 0; i < cookies.size(); i++) {
Cookie cookie = cookies.get(i);
String cookieString = cookie.getName() + "=" + cookie.getValue();
cookieManager.setCookie(url, cookieString);
}
CookieSyncManager.getInstance().sync();
}
}
Here the httpclient is the DefaultHttpClient object you used in the HttpGet/HttpPost request. Also one thing to make sure is the cookie name and value, it should be given
String cookieString = cookie.getName() + "=" + cookie.getValue();
setCookie will the set the cookie for the given URL.
I have some http requests. One of them retrieves and parse cookie from it's response. I save this cookie via CookieSyncManager and CookieManager with following code:
CookieSyncManager.createInstance(context);
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.removeSessionCookie();
cookieManager.removeAllCookie();
String cookieString = cookie.getName() + "=" + cookie.getValue();
Log.e(getClass().toString(), cookieString);
cookieManager.setCookie(START_PAYMENT_URL, cookieString);
CookieSyncManager.getInstance().sync();
Log.e(getClass().toString(), "Get cookie: " + cookieManager.getCookie(START_PAYMENT_URL));
Both Log.e calls write same cookie. So everything looks ok.
I have different activity which contains WebView. I need to call postUrl(String url) method with some POST params and with authorization cookie. I thought that cookie is in CookieManager and everything should work great. Well. It is. But on 4.x devices only.
On 2.x devices WebView makes postUrl without cookie.
Here is activity code which contains WebView:
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.payment_webview);
final String billId = getIntent().getStringExtra(INTENT_BILL_ID);
final WebView webView = (WebView) findViewById(R.id.payment_webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.e(getClass().toString(), url);
view.loadUrl(url);
return false;
}
});
String postData = "id_bill=" + billId;
Log.d(TAG, "Requesting payment URL " + START_PAYMENT_URL + " with post data: " + postData);
Log.d(TAG, CookieManager.getInstance().getCookie(START_PAYMENT_URL));
webView.postUrl(START_PAYMENT_URL, EncodingUtils.getBytes(postData, "BASE64"));
}
CookieManager.getInstance().getCookie(START_PAYMENT_URL) returns null on 2.x devices and cookie value on 4.x devices.
How to fix this problem?
Seems like I figured out what's the problem.
I just removed
cookieManager.removeSessionCookie();
cookieManager.removeAllCookie();
while I'm saving cookies.
I suppose that problem is that all methods of CookieManager work asynchronously. Probably remove cookies methods invoked after cookieManager.setCookie(START_PAYMENT_URL, cookieString); even if they called before it. So CookieManager saves cookies and after that remove cookies methods invoked.