Facebooklogin后更改视图控制器

在这里输入图像说明 我有我的视图控制器下面列出处理Facebooklogin。 现在,应用程序运行并加载具有Facebookloginbutton的视图。 login后,button将文本更改为“注销”。 我想要发生的事情是,一旦用户login,然后去另一个视图控制器。

我在故事板中添加了一个新的视图控制器,并在两者之间做了一个“延续”,但我觉得我错过了一些东西。 如果有帮助,我所做的新视图控制器被命名为“homeViewController”。 谢谢

#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.loginView.readPermissions = @[@"public_profile", @"email", @"user_friends"]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user { NSLog(@"%@", user.name); } - (void)loginViewShowingLoggedInUser:(FBLoginView *)loginView { NSLog(@"You are logged in! :) "); } - (void)loginViewShowingLoggedOutUser:(FBLoginView *)loginView { NSLog(@"You are logged out! :( "); } - (void)loginView:(FBLoginView *)loginView handleError:(NSError *)error { NSString *alertMessage, *alertTitle; if ([FBErrorUtility shouldNotifyUserForError:error]) { alertTitle = @"Facebook error"; alertMessage = [FBErrorUtility userMessageForError:error]; } else if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryAuthenticationReopenSession) { alertTitle = @"Session Error"; alertMessage = @"Your current session is no longer valid. Please log in again."; } else if ([FBErrorUtility errorCategoryForError:error] == FBErrorCategoryUserCancelled) { NSLog(@"user cancelled login"); } else { alertTitle = @"Something went wrong"; alertMessage = @"Please try again later."; NSLog(@"Unexpected error:%@", error); } if (alertMessage) { [[[UIAlertView alloc] initWithTitle:alertTitle message:alertMessage delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show]; } } @end 

只要连接到Facebookloginbutton,就可以将所有需要的东西都存放起来。

如果你想,你可以打电话

 - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { if(currentUser ) { //this checks that the user logged in before moving to the next view return YES; } else return NO; } 

在移动到homeViewController之前检查用户是否成功login。 你会做类似上面的代码

最初检查

 FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { if (status == FBSessionStateOpen || status == FBSessionStateOpenTokenExtended) { //Call your view controller after login NSLog(@"Logged in!"); } }]; 

如果没有login,放入FB的凭证后。 在这个委托下,你的VC在login后显示

 - (void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user { //Call your view controller after login NSLog(@"%@", user.name); } 

另一种方法是检查

 if (![FBSession.activeSession isOpen]) { // presentLoginViewController return; } else { [[FBRequest requestForMe] startWithCompletionHandler: ^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) { if (!error) { //self.label.text = user.name; //self.userProfileImage.profileID = [user objectForKey:@"id"]; NSLog(@"FB id : %@",appContext.userName); //Present your view controller after logged in } }]; }