Cookie作为存储在本地的凭证,用于辨别用户身份。请求时带上特定Cookie,就可判断是否是来自云助理的合法请求,并且可以此获取到用户信息。
云助理网络框架使用的是Retrofit,内嵌浏览器使用的是Crosswalk,如何让后者使用前者存储的Cookies呢?
获取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存储器。
获取对应的Cookie
在内嵌浏览器打开页面前,获取将打开的Url所对应的cookie
URI uri = URI.create(url);
CookieStore cookieStore = RainbowHttpPost.getOkHttpClientManager().getCookieStore();
List<HttpCookie> cookies = cookieStore.get(uri);
将cookies写入XWalkCookieManager
for (HttpCookie cookie : cookies) {
xWalkCookieManager.setCookie(url, cookie.toString());
}
以上,请求时就带上了Cookie,可以进行用户认证了~