如何在 iOS 中从 Facebook SDK 获取用户信息?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/22111993/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-30 23:37:33  来源:igfitidea点击:

How to get user info from Facebook SDK in iOS?

iosfacebookfacebook-sdk-3.1

提问by Peer Mohamed Thabib

How to get user name when user session is open.I tried the session login sample from Facebook sdk samples. if any one knows the solution please help me out. Thanks in advance.

如何在用户会话打开时获取用户名。我尝试了 Facebook sdk 示例中的会话登录示例。如果有人知道解决方案,请帮助我。提前致谢。

 - (IBAction)buttonClickHandler:(id)sender {
        // get the app delegate so that we can access the session property
        SLAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];

        // this button's job is to flip-flop the session from open to closed
        if (appDelegate.session.isOpen) {
            // if a user logs out explicitly, we delete any cached token information, and next
            // time they run the applicaiton they will be presented with log in UX again; most
            // users will simply close the app or switch away, without logging out; this will
            // cause the implicit cached-token login to occur on next launch of the application
   //hear i need to fetch user name ?


            [appDelegate.session closeAndClearTokenInformation];

        } else {
            if (appDelegate.session.state != FBSessionStateCreated) {
                // Create a new, logged out session.
                appDelegate.session = [[FBSession alloc] init];
            }

            // if the session isn't open, let's open it now and present the login UX to the user
            [appDelegate.session openWithCompletionHandler:^(FBSession *session,
                                                             FBSessionState status,
                                                             NSError *error) {
                // and here we make sure to update our UX according to the new session state
                [self updateView];
            }];
        }
    }

回答by Mani

After login authentication, you can get details from active FBSession like below

登录验证后,您可以从活动的 FBSession 中获取详细信息,如下所示

if (FBSession.activeSession.isOpen) {

    [[FBRequest requestForMe] startWithCompletionHandler:
     ^(FBRequestConnection *connection,
       NSDictionary<FBGraphUser> *user,
       NSError *error) {
         if (!error) {
             NSString *firstName = user.first_name;
             NSString *lastName = user.last_name;
             NSString *facebookId = user.id;
             NSString *email = [user objectForKey:@"email"];
             NSString *imageUrl = [[NSString alloc] initWithFormat: @"http://graph.facebook.com/%@/picture?type=large", facebookId];
         }
     }];
}

Update:Instead of iduse objectIDproperty, after release of version v3.14.1(May 12, 2014), the idproperty has been deprecated

更新:代替iduseobjectID属性,v3.14.1 版本发布后(2014 年 5 月 12 日),该id属性已被弃用

NSString *facebookId = user.objectID;

回答by Harunmughal

Hi you can get the details of Facebook user like:

嗨,您可以获取 Facebook 用户的详细信息,例如:

- (void)sessionStateChanged:(NSNotification*)notification {
    if ([[FBSession activeSession] isOpen]) {
        [FBRequestConnection
         startForMeWithCompletionHandler:^(FBRequestConnection *connection,
                                           id<FBGraphUser> user,
                                           NSError *error) {
             if (! error) {

                //details of user
                NSLog(@"User details =%@",user);
             }
         }];
    }else {
        [[FBSession activeSession] closeAndClearTokenInformation];
    }
}

Thanks

谢谢

回答by Daxesh Nagar

if (!error && state == FBSessionStateOpen){
    NSLog(@"Session opened");
    // Show the user the logged-in UI
     FBRequest* userupdate = [FBRequest requestWithGraphPath:@"me" parameters: [NSMutableDictionary dictionaryWithObject:@"picture.type(large),id,birthday,email,gender,username,name,first_name" forKey:@"fields"] HTTPMethod:@"GET"];
    [drk showWithMessage:nil];
    [userupdate startWithCompletionHandler: ^(FBRequestConnection *connection,
                                          NSDictionary* result,NSError *error)
   {
    NSLog(@"dict = %@",result);
   }];
    return;
}

回答by Anton Tropashko

        FBSDKGraphRequest(graphPath: "me", parameters: nil).startWithCompletionHandler({ (connection, object, error) in
            guard let user = object as? Dictionary<String, NSObject> else {
                alert("facebook sdk gave me trash object \(object)")
                return
            }
            if let error = error {
                alert(error.localizedDescription)
            }
            else {
                if let userID = user["id"] {
                   // gr8t success

                }

            }
        })

回答by Augustin Jose

-(void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id)user {

-(void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id)user {

NSLog(@"user facebook details:%@",user.objectID);

}

}

You can implement this delegate method.

您可以实现此委托方法。