我已成功使用facebook SDK登录并获取个人资料图片和名称。但它的观点相同。我想知道如何在登录后更改为另一个视图。
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;
}
答案 0 :(得分:2)
这是自定义按钮方法:
- (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:
}
}];
}
答案 1 :(得分:1)
在最新的FB SDK中,这不再适用了。 FBSession(以及FBRequest)类已被删除。
现在你必须使用FBSDKLoginManager类及其方法
- (void)logInWithReadPermissions:(NSArray *)permissions handler:(FBSDKLoginManagerRequestTokenHandler)handler;
登录和获取用户信息的示例代码:
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"]);
}
}];
}
}];
如上所述here