2015-01-23 4 views
3

Android에서 Crosswalk (Cordova 프로젝트)를 만들려면 Apache HttpClient를 통해 수집 한 쿠키 쿠키를 사용해야합니다. 그러나 이것을 달성하는 방법을 모르겠습니다. XWalkCookieManager로 실험했지만 XWalkCookieManager가 무시 된 경우 으로 처리한다고 생각합니다. 쿠키는 어디서 초기화합니까? 심지어 아직 지원됩니까? 난 정말 어떤 도움을 주셔서 감사합니다 것Android의 Crosswalk WebView에서 프로그래밍 방식으로 쿠키를 설정하십시오.

//cookieStore contains the cookies I got via a request from the Apache 
// HttpClient. 
List<Cookie> cookies = cookieStore.getCookies(); 
for (int i = 0; i < cookies.size(); i++) { 
    Cookie cookie = cookies.get(i); 
    String cookieString = buildCookieStringFromCookie(cookie); 

    // This is a XWalkCookieManager I initialized earlier but it doesn't do anything 
    //as far as I can tell. 
    cookieManager.setCookie(cookie.getDomain(),cookieString); 
} 

,이 현재 성공적으로 횡단 보도를 사용에서 저를 유지하는 유일한 일이다.

나는 CookieManager.getInstance().setCookie(cookie.getDomain(), cookieString);을 통해 표준 안드로이드 쿠키 관리자를 사용해 보았습니다. 그러나 이것은 Crosswalk에서도 무시되는 것 같습니다.

보다도,

안드레아스

나중에 참조 할 수 있도록 // 편집 :

문제는 그 횡단 보도했다 쿠키 URL이 https로 시작하는 기대 : // 및 네이티브 안드로이드 웹보기는하지 않습니다 (또는 다른 방향으로, 나는 더 이상 모르겠다). 이제 잘 작동 어떤 것은 https로 한 번 HTTPS없이 한 번, 두 번 쿠키를 설정하는 것입니다 :

mCookieManager.setCookie(cookie.getDomain(), cookieString); 
    mCookieManager.setCookie("https://" + cookie.getDomain(), cookieString); 

답변

4

당신은 XWalkCookieManager의 인스턴스를 생성하고 그 안에 differents의 쿠키를 설정할 수 있습니다. XwalkViews에서 공유되는 것 같습니다.

// Your can use this inside the onCreate() method 
private XWalkCookieManager mCookieManager; 
mCookieManager = new XWalkCookieManager(); 
mCookieManager.setAcceptCookie(true); 
mCookieManager.setAcceptFileSchemeCookies(true); 

// Pass it to your request executor 
httpRequestExecutor.setXWalkCookieManager(mCookieManager); 
//You're now able to add your cookies to this manager rather than to your cookieManager 

우리는 어떻게 HttpResponse에에서 쿠키를 추출 :

responseHeaders = response.getAllHeaders(); 
for (int i = 0; i < responseHeaders.length; i++) 
{ 
    Header header = responseHeaders[i]; 
    if (header.getName().equalsIgnoreCase("set-cookie")) 
    { 
     mCookieManager.setCookie(request.getUrl(), header.getValue()); 
    } 
} 
+0

아 감사합니다. 나는 "setXWalkCookieManager"메소드에 대해 몰랐다. 나는 이것을 월요일에 시험해보고 그것이 저에게 효과가 있는지 알려주지. – Nanunana

+0

실제로 setXWalkCookieManager는 requestExecutor의 사용자 정의 메소드입니다 (프로젝트에서는 HttpClient를 사용하는 클래스). 귀하의 경우에는 cookieManager 대신 mCookieManager를 사용해야합니다. – Paqman

+0

mhm 이미 시도한 것 같아서 쿠키를 설정하지 않았습니다. 현재 사용중인 횡단 보도 버전을 알고 있습니까? – Nanunana

2

XWalkCooikeManager의 구현은 안드로이드 CookieManager에와 조금 다르다. cookie.getDomain() 앞에 스키마 (http | https)를 추가해야합니다.

이것은 Android WebView에서 CookieManager를 구현할 때 WebAddress (url) .toString()을 사용하기 때문에 URL에 스키마 (http | https)가 추가됩니다. CooieManagerAdapter의 설명 : WebAddress는 android 프레임 워크의 비공개 API이며 Embedder가 CookieManager로 전달한 URL에 대해 완화 된 클래식 WebView 구현의 "quirk"이므로 입력하기 전에 동일한 정규화를 수행합니다 크롬 스택.

관련 문제