2012-01-04 5 views
1

싱글 톤을 만들어 모든 Facebook 메서드에 액세스하고이 싱글 톤에서 로그인 대화 상자를 처리하려고합니다.FB 싱글 톤 로그인

Facebook에서 iOS SDK 자습서를 따랐지만 사용자가 버튼을 누를 때가 아니라 애플리케이션 실행 중에 만 로그인 할 수 있습니다.

문제가 될 것으로 보인다

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
return [self.facebook handleOpenURL:url]; 
} 

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
return [self.facebook handleOpenURL:url]; 
} 

에 대한 대안은, 내 응용 프로그램은 로그인 할 수있는 브라우저 또는 FB 앱으로 전환되지 뭐죠. AppDelegate에서 동일한 항목을 구현할 때 응용 프로그램이 시작된 후에도 작동하지만 immediatly.

답변

2

내가 이런 식으로 해결했다 :

AppDelegate에의

:

-(void)connectToFacebook{ 
facebook = [[Facebook alloc] initWithAppId:kAPPID andDelegate:self]; 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if ([defaults objectForKey:@"FBAccessTokenKey"] 
    && [defaults objectForKey:@"FBExpirationDateKey"]) { 
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; 
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; 

} 

if (![facebook isSessionValid]) { 
    [facebook authorize:nil]; 
} 
} 

// For 4.2+ support 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
return [facebook handleOpenURL:url]; 
} 

- (void)fbDidLogin { 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; 
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
[defaults synchronize]; 
} 

그리고 싱글의 : 작업으로

- (id)init { 
self = [super init]; 
if (self != nil) { 
    NBNAppDelegate *delegate = (NBNAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [delegate connectToFacebook]; 
    facebook = delegate.facebook;   
} 
return self; 
} 
1

가 자신의 솔루션을 인정하지만, 간단한 해결책이있다 싱글 톤에서 로그인 코드를 수행하는 원래의 질문에. 앱 위임자에 넣어야 할 것은 openURL (및 4.2 이전 지원을위한 handleOpenURL)뿐입니다. 다음은 그 예이다 : 다른

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 
    if ([[url scheme] isEqualToString:[NSString stringWithFormat:@"fb%@", facebookAppId]]) {   
     return [[FacebookSingleton sharedFacebook].facebook handleOpenURL:url]; 
    } 
} 

모든 당신은 (모든 로그인 코드 포함) 싱글에 넣어 응용 프로그램 위임을 혼란 할 수 없습니다. 그런 다음 싱글 톤은 FBSessionDelegate 코드를 구현합니다. 이 샘플 코드에서는 "facebook"이라는 싱글 톤에 속성을 선언한다고 가정합니다. 이것은 페이스 북 객체가 당신의 델리게이트에있는 것이 아닌 곳입니다.

참고 : 페이스 북에 URL을 전달하기 전에 구성표를 확인합니다. 앱에 허용되는 다른 스키마가있는 경우에만 필요합니다.

누구든지 싱글 톤 코드를 원한다면 메시지를 남겨두면 게시 할 수 있습니다.

+0

나는 싱글 톤 코드 메이트를보기에 확실히 관심이있다. –

+0

여기 있습니다. http://pastebin.com/Gz9Sm7Ww – Joel