2013-08-12 24 views
0

我試圖搜索這個,但找不到有用的東西。處理取消按鈕在facebook iOS使用會話

[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 
     } 
    }]; 

現在這對我來說很好。但是如果用戶在登錄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

它的NT工作。 – 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,如回調:

- (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

您可以使用Facebook error category和處理錯誤請參閱本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 
      } 
     } 
    }]; 
相關問題