使用自定义buttonloginFacebook

我已经成功使用Facebook SDKlogin并获取个人资料图片和名称。 但是这是相同的观点。 我想知道如何在login后更改为另一个视图。

AppDelegate.m文件

- (void)applicationDidBecomeActive:(UIApplication *)application { [[FBSession activeSession] handleDidBecomeActive]; } -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ return [[FBSession activeSession]handleOpenURL:url]; } 

viewController.m文件

 @interface loginViewController () <FBLoginViewDelegate> @property (weak, nonatomic) IBOutlet FBLoginView *loginView; @property (weak, nonatomic) IBOutlet FBProfilePictureView *ProfilePic; @property (weak, nonatomic) IBOutlet UILabel *ProfileName; - (void)viewDidLoad { [super viewDidLoad]; self.loginView.delegate = self; } #pragma mark FBLoginviewDelegate -(void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user{ self.ProfilePic.profileID = user.objectID; self.ProfileName.text = user.name; } -(void)loginViewShowingLoggedOutUser:(FBLoginView *)loginView{ self.ProfilePic.profileID = nil; self.ProfileName.text = nil; } 

这是自定义button的方法:

 - (void)viewDidLoad { [super viewDidLoad]; // self.loginView.delegate = self; //hide one } - (IBAction)butFacebooklogin:(id)sender { NSArray *permissions = @[@"email",@"user_about_me",@"user_status",@"user_location"]; // OPEN Session! [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { // if login fails for any reason, we alert if (error) { //NSLog(@"error %@",error); // show error to user. } else if (FB_ISSESSIONOPENWITHSTATE(status)) { // no error, so we proceed with requesting user details of current facebook session. //NSLog(@"we are here"); //NSLog(@"----%@",[session accessTokenData].accessToken); // NSString *tok = [session accessTokenData].accessToken; // NSLog(@"tok 2"); [[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) { if (error) { NSLog(@"error:%@",error); } else { /* NSString *userlocation=[NSString stringWithFormat:@"%@",user.location[@"name"]]; NSArray *items = [userlocation componentsSeparatedByString:@","]; NSString *usercity, *userstate; if ([items count]>0) { usercity=[items objectAtIndex:0]; userstate=[items objectAtIndex:1]; userstate = [userstate stringByReplacingOccurrencesOfString:@" " withString:@""]; } else { usercity=@""; userstate=@""; } */ NSString *email=[user objectForKey:@"email"]; if (email.length>0) { email=[user objectForKey:@"email"]; } else { email=@""; } NSString *userUpdate =[NSString stringWithFormat:@"user_id=%@&fname=%@&lname=%@",email,user.first_name,user.last_name,nil]; NSLog(@" RequestString for get login details: %@",userUpdate); // here add ur segue or push view method } }]; // [self promptUserWithAccountName]; // a custom method - see below: } }]; } 

在最新的FB SDK中,这不起作用了。 FBSession(以及FBRequest)类已经被删除。

现在你必须使用FBSDKLoginManager类和它的方法

 - (void)logInWithReadPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler; 

login和获取用户信息的示例代码:

 FBSDKLoginManager* lm = [[FBSDKLoginManager alloc] init]; [lm logInWithReadPermissions:@[@"public_profile", @"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { // no error, so get user info if (!error && !result.isCancelled) { [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { if (!error) { NSLog(@"fetched user:%@ and Email : %@", result,result[@"email"]); } }]; } }]; 

如上所述