Volleyは便利なんだけれども、どうしてもログインが維持されずに困った。
調べて見たところ、某サービスはセッション管理にcookieとUserAgentの一致を見ているらしい。なるほど。
そこで、Volleyで通信する際にCookieとUserAgentをいじって双方意図したものを使ってもらうようにした。
追記:2015/4/27
結局気持ち悪かったのでCookieManagerというのを見つけてきてそっちで書き直しました
Volleyでcookieをちゃんと扱う(あるいはHttpURLConnectionの話)
VolleyはどうもRequestを拡張するのが基本形のようです
VolleyでCookieを使い回す
こんな感じでRequestを拡張するとcookieに関しては解決した。(たぶん)UserAgentもこの手法で設定できるだろう。
でもなんかクラス増やすのちょっとスマートじゃない気もする。だいたい、拡張したらXXXRequestを全部MyXXXRequestに置き換えるのか?HAHAHA、冗談じゃない。そんなダサいの嫌だね。
それを知らないでうっかり標準クラス使ったら全てが終わるしね。
根元のRequestQueueでどうにかする
そこで各Requestではなくそれらを束ねるRequestQueueでどうにかする方法を探しました。
一番近い、というかほぼ答えだったのがこれ
Android、Volley にヘッダ情報を付加する(HurlStack)
これ自身は今回関係ないコードが混じっていたり、try-catchがあんまり好みじゃなかったりで結局以下のような感じに変えて使うことにしました。
// Volleyのリクエストキューを生成
RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext(), new HurlStack(){
@Override
public HttpResponse performRequest(Request<?> request, Map<String, String> additionalHeaders)
throws IOException, AuthFailureError {
Map newHeaders = new HashMap();
newHeaders.putAll(additionalHeaders);
// セッション維持のためcookieとUserAgentを設定する
newHeaders.put("User-Agent", "ユーザーエージェント");
newHeaders.put("Cookie", "クッキーの中身");
// responseを拾えばSet-Cookieを回収できる
HttpResponse response = super.performRequest(request, newHeaders);
// response.getHeaders("Set-Cookie");
return response;
}
});
思ったよりシンプルだ。
その他参考にしたサイト
【Android】Volley各種設定メモ
他にもいくつか書いてあって便利
ネットワーク通信用ライブラリVolleyを使いこなす
そもそもVolleyってなんじゃ?というころにたくさん読み返しました。