LoginSignup
3
2

More than 5 years have passed since last update.

SDWebImage使って認証ヘッダが必要な画像を取得する

Posted at

やりたいこと

GETリクエストを投げると、画像データが返却されるAPIがある。
ただし、リクエストヘッダに下記のような認証用トークンが必要。

X-Authorization: Token XXX

SDWebImage 3.7.3 を使って、出来るだけ簡単に実装したかった。

やったこと

#import <SDWebImage/UIImageView+WebCache.h>
#import <SDWebImage/SDWebImageDownloader.h>

(略)

SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
downloader.headersFilter = ^(NSURL *url, NSDictionary *headers) {
    if ([url.host isEqualToString:@"XXX.com"]) {
        return headers;
    }
    return @{};
};
[downloader setValue:@"Token XXX" forHTTPHeaderField:@"X-Authorization"];

NSURL *url = [NSURL URLWithString:@"https://XXX.com/api/photos/YYY"];
[self.image sd_setImageWithURL:url completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
    NSLog(@"error = %@", error);
}];

通常通りsd_setImageWithURLを呼ぶが、その前にSDWebImageDownloaderのシングルトンインスタンスに対してsetValue:forHTTPHeaderField を呼ぶ。それだけ。
ただし、シングルトンなので、これ以降sd_setImageWithURL呼ぶ度に認証ヘッダが付いてしまう。
特定のドメインだけに認証ヘッダが付くように、headersFilterでフィルタリングする。
このへん を見てもらえれば、何が起こるかわかりやすいと思う。

問題点

今回は、特定のドメインだけ認証ヘッダが必要、他は不要という形だったので、これで良かった。
各ドメインごとにそれぞれのヘッダを付けようと思うと、headersFilterの中で、引数のheadersを無視してNSDictionaryを作らないといけないかも。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2