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










サードパーティで色々とドキュメントが乱立してると厄介ですね。
他のサードパーティ含め、一箇所にまとまったものがあると便利かもしれないですね。