Android WebView无法加载URL SameSite = None

时间:2019-11-07 14:55:05

标签: android cookies http-headers android-webview

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

  

http://google.com/上的资源相关联的cookie被设置为   SameSite=None,但没有Secure。 Chrome的未来版本   仅在标记了SameSite=None的cookie时才投放   Secure。您可以在开发人员工具下查看Cookie   应用程序>存储> Cookies,并在以下位置查看更多详细信息   https://www.chromestatus.com/feature/5633521622188032。”,来源:   https://www.google.com/

我不知道如何解决此问题。我正在执行下一个代码来加载网址,该如何解决?

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");

谢谢

1 个答案:

答案 0 :(得分:1)

此警告专门针对google.com中的cookie,因此您不负责设置其属性。 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是否正在实现新行为。如果该矩阵都是绿色,则您的浏览器 正在实施新的限制。如果面板上有红色或橙色,则说明您的浏览器还没有应用新的默认设置。