2014. 1. 17. 16:50

우선 Facebook SDK 다운!


다운받은 SDK 압축 파일 안의

Facebook Frameworks 와 FBUserSettingsViewResources.bundle 을 xcode의 Frameworks 에 추가한다.

Xcode에서 제공하는 (4 버젼 이후만 가능하다고 함)

Social.framework 와 Adsupport.framework 추가한다.


Facebook에 개발자로 로그인하여 Facebook App Id 를 받아 

내가만든 App 에 입력한다.


AppDelegate.h 에 추가한 코드


#import <FacebookSDK/FacebookSDK.h>


extern NSString *const FBSessionStateChangedNotification;


- (BOOL) openSessionWithAllowLoginUI:(BOOL)allowLoginUI;

- (void) sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error;



AppDelegate.m 에 추가한 코드


#import <FacebookSDK/FacebookSDK.h>


NSString *const FBSessionStateChangedNotification = @"본인의 App Bundle Identifier:FBSessionStateChangedNotification";


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

[FBSettings setDefaultAppID:@"202225256635972"];//이거때문에 엄청난 삽질을 함.

}


/* For FaceBookLogin

 by YG.Seo 2014.1.16 */

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

    return [FBSession.activeSession handleOpenURL:url];

}


/* For FaceBookLogin

 by YG.Seo 2014.1.16 */

- (BOOL) openSessionWithAllowLoginUI:(BOOL)allowLoginUI {


    return [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:allowLoginUI completionHandler:^(FBSession *session,FBSessionState state, NSError *error) {

        [self sessionStateChanged:session state:state error:error];

    }];

}


- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error

{

    switch (state) {

        case FBSessionStateOpen:

            if(!error) {

                NSLog(@"Facebook User session found");

            }

            break;

        case FBSessionStateClosed:

            NSLog(@"Facebook SessionStateClosed");

            break;

        case FBSessionStateClosedLoginFailed:

            NSLog(@"SessionStateColsedLoginFailed");

            [FBSession.activeSession closeAndClearTokenInformation];

            break;

        default:

            break;

    }

    

    [[NSNotificationCenter defaultCenter] postNotificationName:FBSessionStateChangedNotification object:session];

    

    if(error) {

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

        [alertView show];

    }

}


ViewController.h 추가한 코드


#import <FacebookSDK/FacebookSDK.h>


@interface ...

{

NSString *m_strFacebookAccount;

...

}


@property (nonatomic, retain)NSString *m_strFacebookAccount;


/* For FacebookLogin

 by YG.Seo 2014.1.16 */

- (IBAction)OnTouchUpFacebookLogin:(id)sender;

- (void)setFacebookID;


ViewController.m 추가한 코드


#import <FacebookSDK/FacebookSDK.h>


@synthesize m_strFacebookAccount;


- (void)viewDidLoad

{

    [super viewDidLoad];

    /* For FacebookLogin

     by YG.Seo 2014.1.16 */

    AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];

    [appDelegate openSessionWithAllowLoginUI:NO];

    

    [self setFacebookID];

}


/*Facebook 버튼 클릭

 by YG.Seo 2014.1.16 */

- (IBAction) OnTouchUpFacebookLogin:(id)sender

{

    if (FBSession.activeSession.state == FBSessionStateOpen || FBSession.activeSession.state == FBSessionStateOpenTokenExtended) {

        [FBSession.activeSession closeAndClearTokenInformation];

    } else {

        [FBSession openActiveSessionWithReadPermissions:@[@"basic_info"] allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {

             AppDelegate* appDelegate = [UIApplication sharedApplication].delegate;

             [appDelegate sessionStateChanged:session state:state error:error];

         }];

    }

    [self setFacebookID];

}


- (void)setFacebookID

{

    [FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id<FBGraphUser> result, NSError *error) {

        if (!error) {

            m_strFacebookAccount = result.username;

            NSLog(@"user info: %@", result.username);

        } else {

            NSLog(@"Facebook connection Error!!");

        }

    }];

}


역시... 하고나면 별거없다.

우선 ios 쪽 object C 언어가 생소해서 시간도 꽤 걸렸으나,

별거 없네. 안드로이드 GCM 하는 느낌???

암튼 그냥 뒤적이며 하면 됩니다.

자료는 인터넷에 많~아요

Posted by 은돌군