Instagram API のOAuth認証をiPhoneで試してみました
弊社の技術部ブログに超親切な解説が出てたので、
参考にしつつiPhoneでも試してみました。
http://tech.kayac.com/archive/instagramapi.html
さっそくですがまずiPhoneにとって重要なポイントその1、
Webからのアプリケーション登録において、Custom URL schemeを指定できない!
(読みにくいですがhttpかhttpsしか指定できませんよ!とエラー出てます)
ただ確かTwitterもこうだった気がします。(違ったらすいません)
なんだかんだいってリダイレクト先URLをパラメータに指定できたりするのではないでしょうか。
先の記事にはこう明記されています。
twitterとかではredirect_uriはアプリケーション側で好きに設定できましたが、instagramはそうもいかないみたいです。
アプリケーションを登録した際のredirect_uri以外のuriを設定した場合、Exceptionが返ってきます。
でもやってみないことにはわかりません。
試してみることにします。
まずは、ちゃんと実装があっていることを確認するためにも、
認証APIのredirect_uriにWebで登録したuriを入れてやってみました。
#define CALLBACK_URL @"http://instagram.local/callback"
NSString *urlStr = @"https://api.instagram.com/oauth/authorize/"; NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: CLIENT_ID, @"client_id", CALLBACK_URL, @"redirect_uri", @"code", @"response_type", nil]; NSString *serializedUrl = [InstagramAPI serializeURL:urlStr params:params]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:serializedUrl]];
(serializeURL:っていうメソッドはFacebook iOS SDKから拝借しました。)
これを実行すると、Safariに飛んで、
ID / Passwordを入力すると、
ちゃんと認証できました。
ただもちろん、リダイレクト先uriが存在しないので、アプリには戻ってきません。
次は、Info.plistにURL identifier(カスタムURLスキーム)を定義して、
redirect_uriに入れてやってみました。
#define CALLBACK_URL @"instagramtest://authorize"
お、いけるかも?
だめでした・・・
ちっちゃくて見えませんが、
{"message": "Redirect URI does not match registered redirect URI", "type": "OAuthException"}
と表示されています。
つまり、
OAuth APIのパラメータにもカスタムURLスキームを指定できない!
ということになります。
さて、どうしたものでしょうか。。