やりたいこと
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
を作らないといけないかも。