iOS Facebook, Google APIの利用 – 認証

2012.06.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

iOSでFacebook、GoogleのAPIの利用に必要な認証を試してみました。
どちらもiOS用にライブラリが用意されています。ライブラリのチュートリアルのサイトもあり、iOS開発の基本的な知識があれば簡単に試すことができます。
二つのライブラリについて簡単にですがまとめたいと思います。

Facebook APIの認証について

Facebookの認証ではSSO(Single Sign-On)が提供されています。
対象のアプリケーションが動くデバイスでFacebookのiOSアプリケーションがインストールされていてユーザーが認証を行っていた場合には、 ユーザーが対象のアプリケーションに許可を与える際、ユーザー名、パスワードを入力する必要はありません。
またFacebookのiOSアプリケーションがインストールされていない場合はSafariで認証画面を開くなど、環境に応じた動きも組み込まれていて、ライブラリの利用者が意識する必要はありません。

ライブラリ

https://github.com/facebook/facebook-ios-sdk

チュートリアルのURL

http://developers.facebook.com/docs/mobile/ios/build/

使い方

アプリケーションデリゲートクラスFBSessionDelegateの各メソッドを実装して、次の2行で終わりです。
認証が終わったFacebookクラスでGraph APIなどのRequestを送ることができます。

		// YOUR_APPLICATION_IDにはFacebookにアプリケーションを登録した時に取得したApp ID
		Facebook *facebook = [[Facebook alloc] initWithAppId:@"YOUR_APPLICATION_ID" andDelegate:self];

		// PERMISSYON_ARRAYに必要なパーミッションの文字列を入れたNSArrayを設定する。
		// デフォルトのパーミッションで良い時はnilを設定
		;

注意事項

  • FBSessionDelegateは、アプリケーションデリゲートクラスに実装する必要があるようです。ViewControllerなどに実装しても上手く行きません。
  • チュートリアルにありますがアプリケーションのproperty listファイルに項目の追加が必要です。

Google APIの認証について

Cocoaアプリケーション用に、OAuth2.0のライブラリが提供されています。
iOSでは認証用のViewを表示するViewControllerが提供されています。
Google APIの利用には、別途Google API用のObjective-CライブラリGoogle data API用のライブラリが提供されています。
認証とAPI利用のライブラリが分かれていてFacebookのライブラリほどは簡単に利用はできませんが、認証のライブラリはGoogle以外のOAuth2.0にも利用できるようです。

ライブラリ

http://code.google.com/p/gtm-oauth2/

チュートリアルのURL

http://code.google.com/p/gtm-oauth2/wiki/Introduction

使い方

認証用のViewControllerを作成して、コールバックメソッドなどを設定してNavigationControllerにpushします。
ユーザーが認証、アプリケーションへの承認を終えるとコールバックメソッドにAPIアクセスに必要なトークンを含んだGTMOAuth2Authenticationが返されます。

		GTMOAuth2ViewControllerTouch *authController;
		
		// SCOPEは認証時に指定する必要案APIのスコープ
		// CLIENT_ID,CLINET_SECRETはGoogle APIにアプリケーションを登録した時に取得したClient ID, Client secret
		// KEYCHAIN_NAMEはアプリケーションとAPIサービスを識別する為の任意の文字列。トークンを保存するときに使用する。
		authController = [[GTMOAuth2ViewControllerTouch alloc] initWithScope:SCOPE
		             clientID:CLIENT_ID
		         clientSecret:CLINET_SECRET
		     keychainItemName:KEYCHAIN_NAME
		             delegate:self
		     finishedSelector:@selector(viewController:finishedWithAuth:error:)]];
				:
				:
		- (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController
		      finishedWithAuth:(GTMOAuth2Authentication *)auth
		                 error:(NSError *)error {
			if (error != nil) {
			   // Authentication failed
			} else {
			   // Authentication succeeded
			   // authを保存してAPIアクセスに利用する
			}
		}

注意事項

  • GoogleのOAuth2.0用のライブラリを利用するには、Security.frameworkSystemConfiguration.frameworkの追加が必要です。