Android
glide
fresco

[Android] 画像表示する時、Cookieをセットする (Fresco, Glide)

Fresco 1.8.0

gradleにimagepipeline-okHttp3を追加する

    implementation "com.facebook.fresco:imagepipeline-okhttp3:1.7.1"

(最新バージョンは、ドキュメントを参考: http://frescolib.org/docs/using-other-network-layers.html)

ApplicationのonCreate()でFrescoを初期化する時に、Cookieを食わせたOkHttpClientを設定する

// Fresco initialize
final OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                return chain.proceed(chain.request().newBuilder().addHeader("Cookie", PrefHelper.getString(PrefHelper.COOKIE_VALUE)).build());
            }
        }).build();

        Fresco.initialize(this, OkHttpImagePipelineConfigFactory.newBuilder(this, okHttpClient).build());

クッキーは有効期限が消えると変わるので、Preferenceに保存して使っている。初期化処理ではあるが、intercept()はリクエストのたびに呼ばれるので、アプリ起動中で値が変わっても問題ない。

Glide 4.5.0

// com.bumptech.glide.load.model.HeadersにCookieを入れる
Headers headers = new LazyHeaders.Builder()
                .addHeader("Cookie", PrefHelper.getString(PrefHelper.COOKIE_VALUE))
                .build();

// 上で作ったHeaderを使ってGlideUrlを作り、それをロードする
Glide.with(fragment)
        .load(new GlideUrl(imageUrl, headers))
        .into(imageView);