その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

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スキームを指定できない!
ということになります。


さて、どうしたものでしょうか。。