如何在用户会话打开时获取用户名。我尝试了来自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];
}];
}
}
答案 0 :(得分:32)
登录验证后,您可以从活动的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];
}
}];
}
更新而不是id
使用objectID
属性,在版本v3。14。1(2014年5月12日)发布后,id
属性已被删除弃用
NSString *facebookId = user.objectID;
答案 1 :(得分:6)
您好,您可以获得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];
}
}
由于
答案 2 :(得分:1)
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;
}
答案 3 :(得分:1)
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
}
}
})
答案 4 :(得分:-1)
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView用户:(id)user {
NSLog(@"user facebook details:%@",user.objectID);
}
您可以实现此委托方法。