如何使用访问令牌获取Facebook用户ID

我有一个Facebook桌面应用程序,并使用Graph API 。 我能够获得访问令牌,但之后完成 – 我不知道如何获得用户的ID。

我的stream程是这样的:

  1. 我发送用户到https://graph.facebook.com/oauth/authorize与所有必需的扩展权限。

  2. 在我的redirect页面,我从Facebook获取代码。

  3. 然后我用API密钥对graph.facebook.com/oauth/access_token执行HTTP请求,并在响应中获得访问令牌。

从那一刻起,我无法获得用户ID。

这个问题怎么解决?

如果你想使用graphicsAPI来获取当前的用户ID,那么只需发送一个请求到:

https://graph.facebook.com/me?access_token=... 

最简单的方法是

 https://graph.facebook.com/me?fields=id&access_token="xxxxx" 

那么你将得到只包含用户标识的json响应。

Facebook的访问令牌看起来也相似“1249203702 | 2.h1MTNeLqcLqw __。86400.129394400-605430316 | -WE1iH_CV-afTgyhDPc”

如果通过使用|来提取中间部分 分裂你得到

2.h1MTNeLqcLqw __。86400.129394400-605430316

然后再分裂 –

最后一部分605430316是用户标识。

以下是从访问令牌中提取用户标识的C#代码:

  public long ParseUserIdFromAccessToken(string accessToken) { Contract.Requires(!string.isNullOrEmpty(accessToken); /* * access_token: * 1249203702|2.h1MTNeLqcLqw__.86400.129394400-605430316|-WE1iH_CV-afTgyhDPc * |_______| * | * user id */ long userId = 0; var accessTokenParts = accessToken.Split('|'); if (accessTokenParts.Length == 3) { var idPart = accessTokenParts[1]; if (!string.IsNullOrEmpty(idPart)) { var index = idPart.LastIndexOf('-'); if (index >= 0) { string id = idPart.Substring(index + 1); if (!string.IsNullOrEmpty(id)) { return id; } } } } return null; } 

警告:访问令牌的结构是无证的,并不总是适合上面的模式。 需要您自担风险使用它。

更新由于Facebook的变化。 从encryption访问令牌获取用户ID的首选方法如下:

 try { var fb = new FacebookClient(accessToken); var result = (IDictionary<string, object>)fb.Get("/me?fields=id"); return (string)result["id"]; } catch (FacebookOAuthException) { return null; } 

你可以在onSuccess(LoginResult loginResult)上使用下面的代码,

。loginResult.getAccessToken()getUserId();

用最新的API,这里是我用它的代码

 /*params*/ NSDictionary *params = @{ @"access_token": [[FBSDKAccessToken currentAccessToken] tokenString], @"fields": @"id" }; /* make the API call */ FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:params HTTPMethod:@"GET"]; [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { NSDictionary *res = result; //res is a dict that has the key NSLog([res objectForKey:@"id"]); 

在FacebookSDK v2.1(我不能检查旧版本)。 我们有

 NSString *currentUserFBID = [FBSession activeSession].accessTokenData.userID; 

不过根据FacebookSDK的评论

@discussion这可能不会填充login行为,如iOS系统帐户。

所以可能是你应该检查它是否可用,然后是否使用它,或者调用请求来获取用户ID

你只需要打另一个graphicsAPI:

 https://graph.facebook.com/me?access_token={access-token} 

它会给你的电子邮件ID和用户ID(用于Facebook)也。