iOSのFacebookログインで気をつけること

プログラミング

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

最後に

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

コメントを残す