Android 将Cookie注入Web视图
我正在调用一个服务来获取Cookies作为JSONArray,看起来像这样Android 将Cookie注入Web视图,android,cookies,webview,Android,Cookies,Webview,我正在调用一个服务来获取Cookies作为JSONArray,看起来像这样 {"domain":"blabla.com","expirationDate":1896127200,"hostOnly":false,"httpOnly":false,"name":"__ssid","path":"\/","sameSite":"no_restriction","secure":false,"session":false,"storeId":"0","value":"392997aa-ce67-4d9
{"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}
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();
<pre><?php print_r( $_COOKIE ); ?></pre>
然后像这样解析这些cookies
{"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}
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();
<pre><?php print_r( $_COOKIE ); ?></pre>
然后像这样注射饼干
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();
}
}
但是当我加载https://blabla.com
进入WebView cookies不起作用,我是否遗漏了什么
请提供帮助您可以使用以下代码设置Cookie
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);
输出:
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
出于测试目的,您可以使用以下url
https://codean.app/so/cookies.php
在这个php文件中,它只输出所有cookie
我在上面的示例中使用了相同的url,这就是我使用的url,它工作得非常好:
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)
如果必须将JSON注入Cookie,只需使用yourJson.toString()请尝试以下方法:
}有人批评我的答案吗?
cookie.domain()
数组中的多个值是否相同?如果是这样,它将被替换为Hashmap。有关详细信息,请参阅。cookieManager.acceptCookie()
是一个getter,而不是setter