2015-01-23 3 views
3

Мне нужно сделать Crosswalk на Android (в проекте Cordova) использовать некоторые куки, которые я собрал через Apache HttpClient. Однако я не уверен, как этого добиться. Я пробовал экспериментировать с XWalkCookieManager, но я думаю, что все, что я делаю с XWalkCookieManager, игнорируется. Где бы я инициализировал файл cookie ? Это еще поддерживается?Установить cookie программно в Crosswalk WebView на Android

//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); 
} 

Я был бы очень признателен за любую помощь, это единственное, что в настоящее время удерживает меня от использования пешеходном успешно.

Я также пробовал использовать стандартный менеджер файлов cookie Android через CookieManager.getInstance().setCookie(cookie.getDomain(), cookieString);, но это, похоже, также игнорируется Crosswalk.

Бест,

Andreas

// Edit для дальнейшего использования:

Вопрос был, что Пешеходный ожидает печенье URL, чтобы начать с https: // и родной Android WebView не (или наоборот, я уже не уверен). Теперь то, что работает хорошо, чтобы установить печенье дважды, один раз без HTTPS и один раз с https:

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

ответ

4

Вы можете создать экземпляр XWalkCookieManager и установить дифферент печенье в нем. Кажется, что они разделяются по 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

ahhh большое спасибо! Я не знал о методе setXWalkCookieManager. Я попробую это в понедельник и сообщит, будет ли это работать для меня. – Nanunana

+0

На самом деле setXWalkCookieManager - это настраиваемый метод на моем requestExecutor (в вашем проекте это будет ваш класс с использованием HttpClient). В вашем случае вы должны просто использовать mCookieManager, а не ваш cookieManager. – Paqman

+0

mhm Я думаю, что я уже пробовал это, и он просто не устанавливал куки. Вы знаете, какую версию пешеходного перехода вы используете в настоящее время? – Nanunana

2

Реализация XWalkCooikeManager немного отличается от Android CookieManager. Вы должны добавить схемы (http | https) перед cookie.getDomain().

Это потому, что реализация CookieManager в Android WebView использует WebAddress (url) .toString(), который добавит схемы (http | https) в url. В качестве объяснения в CooieManagerAdapter: WebAddress - это частный API в рамках андроида и «причуда» в реализации классического WebView, который позволил бы взломам расслаиваться о том, какие URL-адреса они передавали в CookieManager, поэтому мы делаем такую ​​же нормализацию до ввода Хром.

Смежные вопросы