Android 将Cookie注入Web视图

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

我正在调用一个服务来获取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-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