WebViewのCookieをネイティブ側のリクエストで使う方法(iPhone・Android)

iPhone版

CookieをiPhone側でセット/削除する方法 – 風日記
iphone – Where are an UIWebView’s cookies stored? – Stack Overflow
を見た。

iPhone側はすごく簡単で、WebViewでリクエストを投げると、それだけでASIHTTPRequest(ネイティブ)のリクエストと共有されていた。
Cookieの内容を確認するにはNSHTTPCookieStorageを使うとすぐに見ることができる。

サンプル・コード

NSHTTPCookie *cookie;
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [cookieJar cookies]) {
    NSLog(@"%@", cookie);
    if ([@"lab.hisasann.com" isEqualToString:cookie.domain]) {
        NSLog(@"name - %@", cookie.name);
        NSLog(@"value - %@", cookie.value);
    }
}

gist

iPhoneでWebViewのCookieを共有する方法 — Gist


Android版

Androidのほうはやや複雑、WebViewのリクエストが完了するイベントで、すでにインスタンス化してあるHttpClientに対して、Cookieをaddしないといけない。
これをしないと、HttpClient(ネイティブ)のリクエストにCookieが乗ってくれない。

サンプル・コード

webview.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
  System.out.println("onPageFinished - " + url);
  super.onPageFinished(view, url);

  // Cookieの保存が予想されるURLの場合
  if (url.indexOf("http://lab.hisasann.com/") > -1) {
      // WebViewのCookieを取得
      String cookie = CookieManager.getInstance().getCookie(url);
      System.out.println("cookie - " + cookie);
      String[] cookies = cookie.split(";");
      for (String keyValue : cookies) {
    keyValue = keyValue.trim();
    String[] cookieSet = keyValue.split("=");
    // Cookieを作成
    BasicClientCookie bCookie = new BasicClientCookie(cookieSet[0], cookieSet[1]);
    bCookie.setDomain("lab.hisasann.com");
    bCookie.setPath("/");
    // CookieStoreを取得
    CookieStore store = httpClient.getCookieStore();
    // Cookieを追加
    store.addCookie(bCookie);
      }
  }
    }
});

Cookieの内容を確認するにはCookieStoreを使うとすぐに見ることができる。

サンプル・コード

CookieStore store = httpClient.getCookieStore();
List<Cookie> cookies = store.getCookies();
for (Cookie cookie : cookies) {
    // クッキーの設定
    if ("lab.hisasann.com".equals(cookie.getDomain())) {
  // クッキーを再設定
  System.out.println(cookie.getName() + "=" + cookie.getValue());
  break;
    }
}

つまり、ひとつのHttpClientインスタンスにCookieをセットしているので、複数のHttpClientをnewする場合は、それぞれにCookieを入れないとダメっぽい。

gits

AndroidでWebViewのCookieを共有する方法 — Gist

どうでもいいことだが

iPhoneの

NSURL *url = [NSURL URLWithString:@"http://lab.hisasann.com/cookie/setcookie.php"];

http:/でも動いた。つまりスラッシュが一個足りない!

Androidではダメでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>