首页 > 解决方案 > Android WebView 未加载 url SameSite=None

问题描述

我正在尝试加载网络(例如 www.google.com),但网络视图将下一条消息发送到控制台:

与http://google.com/上的资源相关联的 cookie设置为带 SameSite=None但不带Secure. 未来版本的 Chrome 将仅在SameSite=None它们也被标记的情况 下提供标记的 cookie Secure。您可以在 Application>Storage>Cookies 下查看开发人员工具中的 cookie,并在 https://www.chromestatus.com/feature/5633521622188032上查看更多详细信息。”,来源: https ://www.google.com/

我不知道如何解决这个问题。我正在做下一个代码来加载一个 url,我该如何解决这个问题?

private void initWebView(String url){

        webViewTvWeakReference = new WeakReference<>(new WebView(getActivity()));
        webViewTvWeakReference.get().setId(TV_WEB_VIEW_ID);
        webViewTvWeakReference.get().setLayerType(View.LAYER_TYPE_HARDWARE, new Paint());
        webViewTvWeakReference.get().setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        webViewTvWeakReference.get().setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.lightBlueBackgroundColor));
        webViewTvWeakReference.get().requestFocusFromTouch();

        setUpWebSettings(webViewTvWeakReference.get());

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            CookieManager.getInstance().removeAllCookies(null);
        }

        Map<String, String> headers = new HashMap<>();
        headers.put("Set-Cookie", "HttpOnly;Secure;SameSite=Strict");

        if (BuildConfig.DEBUG) {
            webViewTvWeakReference.get().setWebViewClient(new WebViewClient() {
                @Override
                public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                    handler.proceed();
                }
            });
        }

        if(!url.isEmpty()){
            webViewTvWeakReference.get().loadUrl(url, headers);
        }else{
            webViewTvWeakReference.get().loadUrl("about:blank", headers);
        }

        webViewTvWeakReference.get().pauseTimers();     // WebView timers consumes a lot off CPU
        webViewTvWeakReference.get().resumeTimers();    // Pause and Resume timers fix this behaivour

    }

我已将下一行添加到标题中,但仍然无法正常工作。

headers.put("Set-Cookie", "HttpOnly;Secure;SameSite=Strict");

谢谢

标签: androidcookieshttp-headersandroid-webview

解决方案


此警告专门针对来自 的 cookie google.com,因此您不负责设置其属性。Google 团队需要将相关属性应用到他们的 cookie 以解决此警告。

如果您确实有任何需要在跨站点/第三方上下文中发送的 cookie,则需要使用以下方式设置它们:

Set-Cookie: foo=bar; SameSite=None; Secure

然而,在这个阶段,这个警告应该纯粹是信息性的。cookie 仍在随请求一起发送,您应该不会在 WebView 中看到网站行为的任何问题。

这些新限制将成为 Chrome 80 中的默认设置,但它们暂时不适用于 WebView。

您可以在https://web.dev/samesite-cookies-explained了解有关这些即将发生的变化的更多信息。

此外,您可以通过将其指向https://samesite-sandbox.glitch.me来检查您的特定浏览器或 WebView 是否正在实施新行为。如果该矩阵全为绿色,则您的浏览器正在实施新的限制。如果板上有任何红色或橙色,则您的浏览器尚未应用新的默认值。


推荐阅读