【问题标题】:CookieSyncManager sync asynchronous behaviorCookieSyncManager 同步异步行为
【发布时间】:2013-11-28 14:36:47
【问题描述】:

我的问题与Cookies & Webview - CookieSyncManager in Android! 非常相似,但我确实需要调整SystemClock.sleep() 的时间或以其他方式让setCookie 立即做出反应。没有用 500ms 工作,但是用 5000ms 工作,所以不是很可靠。有什么方法可以在onPageStarted 中循环睡眠,我在setCookie 之后为CookieManager 调用sync

我的环境从另一台服务器获取 Cookie 值,所以这里没有会话 cookie。

谢谢。

更新:

看起来 Cookie 处理根本不起作用。我有以下网络流程:

  1. 设置 Cookie 并加载 url
  2. 服务器处理该 Cookie 正常,因此它添加另一个 cookie 以指示我们有一个会话
  3. WebView 仍然加载显示没有会话的页面
  4. 我再次启动 WebView,现在 getCookie 显示会话 Cookie 并正确加载页面

【问题讨论】:

    标签: android android-webview


    【解决方案1】:

    在应用程序中出现WebView 之前,我最终调用了setCookie(我从另一台服务器获取Cookie 值),还添加了WebViewClient onPageStartedonPageFinishedcookie 同步,它似乎工作正常,我不必造成睡眠延迟。

    【讨论】:

      【解决方案2】:

      在调用webview.loadUrl(url)之前,我添加了一个while循环来检测url的cookie是否被注入。如果 cookie 没有被异步设置,休眠一段时间。希望对您有所帮助。

      while (!CookieManager.getInstance().hasCookies() 
          || CookieManager.getInstance().getCookie(url)==null){
              SystemClock.sleep(TIME_WAITING_FOR_COOKIE_SYNC);
          }
      webview.loadUrl(url);
      

      【讨论】:

      • 这里的 CookieManager 可能有 Cookie,但没有正确的 Cookie,所以我会删除 hasCookies 检查,而只执行 getCookie(url) 检查并验证结果不为 null 或为空。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多