3

Android の Crosswalk (Cordova プロジェクト) で、Apache HttpClient 経由で収集した Cookie を使用する必要があります。しかし、これを達成する方法がわかりません。XWalkCookieManager を試してみましたが、XWalkCookieManager で行うことはすべて無視されると思います。Cookie マネージャーはどこで初期化しますか? これはまだサポートされていますか?

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

助けていただければ幸いです。現在、これが Crosswalk の使用を妨げている唯一の理由です。

また、標準の Android cookie Manager を使用してみましCookieManager.getInstance().setCookie(cookie.getDomain(), cookieString);たが、これは Crosswalk でも無視されるようです。

一番、

アンドレアス

// 後で参照できるように編集:

問題は、Crosswalk が Cookie の URL が https:// で始まることを想定しているのに対し、ネイティブの Android Webview がそうではないことです (またはその逆で、もうわかりません)。今うまくいっているのは、Cookie を 2 回設定することです。1 回は https なしで、もう 1 回は https を使用します。

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

2 に答える 2

4

XWalkCookieManager のインスタンスを作成し、その中にさまざまな Cookie を設定できます。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 から Cookie を抽出する方法:

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());
    }
}
于 2015-02-19T09:39:02.677 に答える
2

XWalkCooikeManager の実装は、Android の CookieManager とは少し異なります。cookie.getDomain() の前にスキーム (http|https) を追加する必要があります。

これは、Android WebView での CookieManager の実装が WebAddress(url).toString() を使用し、スキーム (http|https) が URL に追加されるためです。CooieManagerAdapter の説明のように: WebAddress は Android フレームワークのプライベート API であり、CookieManager に渡す URL について組み込み者が緩和できるようにする Classic WebView 実装の「癖」であるため、クロムに入る前に同じ正規化を行います。スタック。

于 2016-04-26T07:06:04.773 に答える