2013-08-12 4 views
0

검색을 시도했지만 유용하지 않습니다.세션을 사용하여 iOS의 Facebook 취소 버튼 처리

[FBSession setActiveSession:[[FBSession alloc] initWithPermissions:[NSArray arrayWithObjects:@"publish_actions,read_stream,user_hometown,user_birthday,email", nil]]]; 

    [[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorForcingWebView completionHandler: 
    ^(FBSession *session,FBSessionState state,NSError *error) 
    { 
     if(state == FBSessionStateOpen) 
     { 
      // use user's detail and post on Facebook 
     } 
    }]; 

이제 제대로 작동합니다. 그러나 페이스 북에 로그인하기 전에 사용자가 닫기/취소 버튼을 누르면 어떻게됩니까? 사용자가 취소 버튼을 누르면 명령문 집합을 실행해야합니다. 어떻게해야합니까? 도움이 될 것입니다.

답변

1

는 예를 들어, 로그인 기능을 호출 한 후이


[FBSession setActiveSession:[[FBSession alloc] initWithPermissions:[NSArray arrayWithObjects:@"publish_actions,read_stream,user_hometown,user_birthday,email", nil]]]; 

[[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorForcingWebView completionHandler: 
^(FBSession *session,FBSessionState state,NSError *error) 
{ 
    if(state == FBSessionStateOpen) 
    { 
     // use user's detail and post on Facebook 
    } 
    else if(state == FBSessionStateClosed) 
    { 
     // if user not authenticated 
    } 
    else if(steate == FBSessionStateClosedLoginFailed) 
    { 

    } 

}]; 


+0

를 참조하십시오. – keen

+0

수정 된 코드 –

+0

예. 이미이 해결책을 발견했습니다. 그리고 그 일. – keen

1

을 시도 :

- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI { 

    NSArray *permissions = [NSArray arrayWithObjects:@"friends_photos",@"friends_birthday",@"email", nil]; 

    return [FBSession openActiveSessionWithReadPermissions:permissions 
         allowLoginUI:allowLoginUI 
         completionHandler:^(FBSession *session, FBSessionState state, NSError *error) { 
         [self sessionStateChanged:session state:state error:error]; 
    }]; 
} 

당신은 위임 meth9od 예에서 콜백을 얻을 수 있습니다 :

당신은 Facebook error category을 사용할 수 있으며 오류를 처리하는
- (void)sessionStateChanged:(FBSession *)session 
        state:(FBSessionState)state 
        error:(NSError *)error 
{ 

    switch (state) { 
    case FBSessionStateOpen: 
     if(!error) 
     { 

     } 
     break; 
    case FBSessionStateClosed: 
     { 
      NSLog(@"FBSessionStateClosed"); 
      [FBSession.activeSession closeAndClearTokenInformation]; 
     } 
     break; 
    case FBSessionStateClosedLoginFailed: 
     { 
      NSLog(@"FBSessionStateClosedLoginFailed :- logged failed"); 
     } 
     break; 
    default: 
     break; 
    } 

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

    if (error) { 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"Error: %@", 
                   [AppDelegate FBErrorCodeDescription:error.code]] 
                 message:error.localizedDescription 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
    [alertView show]; 
    } 
} 
+0

도움이되었지만 내가 원하는 것이 아닙니다. 나는 곧 대답 할 것이다. 도와 주셔서 고맙습니다. – keen

5

는 NT를 작동하고이 link

[FBSession openActiveSessionWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceEveryone allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError* error){ 

     if(!error){ 

      //success do something 
     } 
     else{ 

      //Error 
      if([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryUserCancelled){ 

       //user have pressed on cancel/close button 
      } 
      else { 

       //loging failed 
      } 
     } 
    }];