2011-08-16 6 views
0
- (id)init { 
if (self == [super init]) { 
    facebook = [[Facebook alloc] initWithAppId:kAppId]; 

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

    if (![facebook isSessionValid]) { 
     permissions = [[NSArray arrayWithObjects: 
         @"read_stream", @"user_birthday", 
         @"publish_stream", nil] retain]; 
     [facebook authorize:permissions delegate:self]; 
    } 

    [self login]; 
} 
return self; 

} 

- (void)login { 
if (![_session isConnected]) { 
    [self postToWall]; 
} 


if (![facebook isSessionValid]) { 
    [facebook authorize:permissions delegate:self]; 
} 
} 

- (void)fbdidLogin { 
[[NSUserDefaults standardUserDefaults] setObject:self.facebook.accessToken forKey:@"FBAccessToken"]; 
[[NSUserDefaults standardUserDefaults] setObject:self.facebook.expirationDate forKey:@"FBExpirationDate"]; 

// User has logged in to Facebook, now get their userId from Facebook 
[facebook requestWithGraphPath:@"me" andDelegate:self]; 
} 

-(void)postToWall 
{ 
SBJSON *jsonWriter = [[SBJSON new] autorelease]; 

NSDictionary *actionLinks = [NSArray arrayWithObjects:[NSDictionary dictionaryWithObjectsAndKeys: 
                 @"Always Running",@"text",@"http://itsti.me/",@"href", nil], nil]; 

NSString *actionLinksStr = [jsonWriter stringWithObject:actionLinks]; 
NSDictionary *attachment = [NSDictionary dictionaryWithObjectsAndKeys: 
          @"Your Happiness!", @"name", 
          @"asda", @"caption", 
          @"asdf", @"description", 
          nil]; 
NSString *attachmentStr = [jsonWriter stringWithObject:attachment]; 
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
           @"Share on Facebook", @"user_message_prompt", 
           actionLinksStr, @"action_links", 
           attachmentStr, @"attachment", 
           nil]; 


[facebook dialog:@"stream.publish" andParams:params andDelegate:self]; 

} 

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 

return [facebook handleOpenURL:url]; 
} 

이것은 페이스 북 대화 상자를 호출하는 나의 방법입니다.하지만 게시 점수를 얻기 위해 클릭 할 때마다, 권한 상자가 먼저 나타납니다. 게시 대화 상자가 나타나면 권한을 부여해야합니다. 권한을 부여하고 싶습니다. 나는 그것을 저장하고 싶습니다. 저장 한 후에는 허가 상자를 다시보고 싶지 않습니다. 어떻게 할 수 있습니까? 내 코드에 어떤 문제가 있습니까?왜 fbdidlogin이 호출하지 않았습니까?

편집 : 내 액세스 토큰과 만료 날짜가 null입니다.

답변

1

확인할 사항은 fbDidLogin 대신 "fbdidLogin"메서드를 호출하는 것입니다. 대소 문자를 구분합니다.

View Controller 헤더 파일에서 FBSessionDelegate를 지원하는 프로토콜 중 하나로 추가했는지 확인하십시오. 이것이 fbDidLogin이 호출되지 않은 이유입니다. 언제나 NSLog를 추가하여 fbDidLogin 메소드에 도달했는지 확인할 수 있습니다.

+0

나는 fsDidlogin을 nslog로 확인하고 FBSession Delegate가 포함되어 있는지 확인합니다. 원하는 경우 헤더 파일을 게시 할 수도 있습니다. –

+0

물론, 헤더 파일을 게시하고 최신 구현 파일을 다시 게시하십시오. –

+0

나는 모두를 삭제하고 이전 것에서 아마 무언가를 잃는 다시 처리한다 –

0

Facebook의 싱글 사인온 (SSO) 기능을 구현해야합니다.

http://developers.facebook.com/docs/guides/mobile/#ios

이 링크는 당신이 당신의 앱은 한 번 허가를 요청합니다 조심스럽게 따라 사용자가 당신의 앱을 제거 할 때까지이 (다시 권한을 요청하지 않을 경우, SSO를 구현하기위한 단계별 가이드를 가지고)

www.facebook.com으로 가서 "Developer Tools"를 사용하여 새로운 Facebook App을 만들고, 당신은 App의 관리자가되며, AppID, 이것도 필요합니다.

+0

그래, 내 애플 리케이션을 만들기위한이 페이지를 보지만 applicationdelegate 페이지가 아닌 다른 viewcontroller에서 페이스 북을 호출하고있다. –

+0

다시 확인했지만 누락 된 이유를 찾을 수 없습니까? 더 이상 도움이 필요하십니까? pls –

관련 문제