Facebook SDKを使ってのログイン実装
iOSのFacebook SDKを使ってログインさせようと思ったのですが、なかなか手こずったので、メモ。
意外と色々なドキュメントが乱立しているので、注意が必要かと思います。
AppDelegate.h
#import <FacebookSDK/FacebookSDK.h>
AppDelegate.m
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url { return [FBSession.activeSession handleOpenURL:url]; }
Login.h
#import "AppDelegate.h"
Login.m
- (IBAction)facebookLoginButtonClickHandler:(id)sender NSArray *permissions = [[NSArray alloc] initWithObjects: @"email", @"read_stream", @"user_about_me", @"user_birthday", nil]; // should close fbsession every time cause solving to repeat login and logout [FBSession.activeSession close]; // make fbsession [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:true completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { if (status == FBSessionStateClosedLoginFailed || status == FBSessionStateCreatedOpening) { // } else if (!session.isOpen) { // } else { [[FBRequest requestForMe] startWithCompletionHandler: ^(FBRequestConnection *connection, NSDictionary *user, NSError *error) { if (!error) { NSLog("%@", session.accessTokenData.accessToken); } else { [[FBSession activeSession] closeAndClearTokenInformation]; [FBSession setActiveSession:nil]; } }]; } }];
気をつけたいのは、AppDelegate.mとLogin.m。
AppDelegate.mの関数は入れないと上手く動かなかったです。
Login.mでは、Facebookのセッションを発行する前に、[FBSession.activeSession close];を入れないとログインとログアウトを繰り返した際に、以下のようなエラーが起きちゃいます。
[FBSession release]: message sent to deallocated instance 0x115a65140
サードパーティで色々とドキュメントが乱立してると厄介ですね。
他のサードパーティ含め、一箇所にまとまったものがあると便利かもしれないですね。