Facebook SDK FBLoginView

时间:2014-12-04 11:19:25

标签: ios objective-c facebook facebook-graph-api sdk

我已将Facebook SDK应用到我的项目中。我使用FBLoginView登录。当我第一次访问该应用时,我使用此StartView创建FBLoginView并在Facebook上签名。关闭我的应用程序后,我想第二次启动它。但现在我不想用登录按钮显示StartView,我想从我的应用程序中显示主页面。我怎么能做到这一点?

在我的AppDelegate我写了这个:

if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded){

//Go to theMain page

}

它适用于FBLoginView,还是仅适用于customLoginButton

1 个答案:

答案 0 :(得分:1)

在您的情况下,添加:

// If there's one, just open the session silently, without showing the user the login UI
[FBSession openActiveSessionWithReadPermissions:@[@"public_profile"]
                                 allowLoginUI:NO
                            completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
                              // Handler for session state changes
                              // This method will be called EACH time the session state changes,
                              // also for intermediate states and NOT just when the session open
                              [self sessionStateChanged:session state:state error:error];
                            }];

然后实施方法sessionStateChanged:session

// This method will handle ALL the session state changes in the app
- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error
{
    // If the session was opened successfully
    if (!error && state == FBSessionStateOpen){
    NSLog(@"Session opened");
    // Show the user the logged-in UI
    [self goToMainPage];
    return;
}
if (state == FBSessionStateClosed || state == FBSessionStateClosedLoginFailed){
    // If the session is closed
    NSLog(@"Session closed");
    // Show the user the logged-out UI
    [self userLoggedOut];
}

// Handle errors
if (error){
    NSLog(@"Error");
    NSString *alertText;
    NSString *alertTitle;
    // If the error requires people using an app to make an action outside of the app in  order to recover
  if ([FBErrorUtility shouldNotifyUserForError:error] == YES){
      alertTitle = @"Something went wrong";
      alertText = [FBErrorUtility userMessageForError:error];
  [self showMessage:alertText withTitle:alertTitle];
  } else {

      // If the user cancelled login, do nothing
      if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryUserCancelled) {
        NSLog(@"User cancelled login");

      // Handle session closures that happen outside of the app
      } else if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryAuthenticationReopenSession){
        alertTitle = @"Session Error";
        alertText = @"Your current session is no longer valid. Please log in again.";
        [self showMessage:alertText withTitle:alertTitle];

      // Here we will handle all other errors with a generic error message.
      // We recommend you check our Handling Errors guide for more information 
      // https://developers.facebook.com/docs/ios/errors/
      } else {
        //Get more error information from the error
        NSDictionary *errorInformation = [[[error.userInfo obje ctForKey:@"com.facebook.sdk:ParsedJSONResponseKey"] objectForKey:@"body"] objectForKey:@"error"];

        // Show the user an error message
        alertTitle = @"Something went wrong";
        alertText = [NSString stringWithFormat:@"Please retry. \n\n If the problem persists contact us and mention this error code: %@", [errorInformation objectForKey:@"message"]];
        [self showMessage:alertText withTitle:alertTitle];
      } 
    }
    // Clear this token
    [FBSession.activeSession closeAndClearTokenInformation];
    // Show the user the logged-out UI
    [self userLoggedOut];
  }
}

您可以阅读complete doc了解更多信息