Glideに独自の認証情報を持たせる

1 min read読了の目安(約1000字

LazyHeaderFactory

ユーザーに表示したい画像を、サーバーから取得した有効期限つきの認証情報を持たせたい時はよくあるかと思います。

以下を使うと、うまくバックグラウンドでフェッチしながらシンプルに画像リクエストに認証を持たせてあげられます。

https://bumptech.github.io/glide/javadocs/380/com/bumptech/glide/load/model/LazyHeaderFactory.html

An interface for lazily creating headers that allows expensive to calculate headers (oauth for example) to be generated in the background during the first fetch.

通信して取得したりするコストの高いOAuthなどの認証Headerを、バックグラウンドで取得できます。

val lazyHeaders = LazyHeaders.Builder().addHeader("Authorization") {
    "Bearer ${tokenRepository.load()}"
}.build()

GlideUrlの引数に与えて、そのまま渡してあげれば完了です。

val grideUrl = object : GlideUrl(keyUrl, lazyHeaders) {
    override fun getCacheKey(): String = keyUrl.substringBefore("?")
}

Glide.with(context)
        .load(grideUrl)
        .into(imageView)

※getCaheKeyは期限ごとにクエリが変わってしまう画像(CloudFrontなど)をキャッシュするためなのでOptionalです。