rainbow-android-app

Cookies管理

  • Cookie作为存储在本地的凭证,用于辨别用户身份。请求时带上特定Cookie,就可判断是否是来自云助理的合法请求,并且可以此获取到用户信息。

  • 云助理网络框架使用的是Retrofit,内嵌浏览器使用的是Crosswalk,如何让后者使用前者存储的Cookies呢?

    1. 获取RestAdapter的CookieStore

      获取

      restAdapter = new RestAdapter.Builder()
               .setEndpoint(Config.HTTP_URL)
               .setLogLevel(RestAdapter.LogLevel.NONE)
               .setClient(new OkClient(okHttpClientManager.getOkHttpClient()))
               .build();
      

      中自定义的OkHttpClient。其中在OkHttpClient初始化时进行cookieHandler的设置:

      CookieManager cm = new CookieManager();
      cm.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
      okHttpClient.setCookieHandler(cm);
      cookieStore = cm.getCookieStore();
      

      cookieStore即我们所需要的Cookies存储器。

    2. 获取对应的Cookie

      在内嵌浏览器打开页面前,获取将打开的Url所对应的cookie

      URI uri = URI.create(url);
      CookieStore cookieStore = RainbowHttpPost.getOkHttpClientManager().getCookieStore();
      List<HttpCookie> cookies = cookieStore.get(uri);
      
    3. 将cookies写入XWalkCookieManager

      for (HttpCookie cookie : cookies) {
       xWalkCookieManager.setCookie(url, cookie.toString());
      }
      

      以上,请求时就带上了Cookie,可以进行用户认证了~