У меня есть настольное приложение для Facebook, и я использую Graph API.
Я могу получить токен доступа, но после этого - я не знаю, как получить идентификатор пользователя.
Мой поток выглядит следующим образом:
-
Я посылаю пользователя https://graph.facebook.com/oauth/authorize со всеми необходимыми расширенными разрешениями.
-
На моей странице перенаправления я получаю код от Facebook.
-
Затем я выполняю HTTP-запрос на graph.facebook.com/oauth/access_token с моим ключом API, и я получаю токен доступа в ответе.
С этого момента я не могу получить идентификатор пользователя.
Как решить эту проблему?
Ответ 1
Если вы хотите использовать Graph API для получения текущего идентификатора пользователя, просто отправьте запрос:
https://graph.facebook.com/me?access_token=...
Ответ 2
Самый простой способ -
https://graph.facebook.com/me?fields=id&access_token="xxxxx"
тогда вы получите ответ json, который содержит только userid.
Ответ 3
Тоже токена facebook выглядит тоже
"1249203702 | 2.h1MTNeLqcLqw __ 86400.129394400-605430316 |. -WE1iH_CV-afTgyhDPc"
если вы извлекаете среднюю часть с помощью | для разделения вы получите
2.h1MTNeLqcLqw __ 86400.129394400-605430316.
затем снова разделить на -
последняя часть 605430316 является идентификатором пользователя.
Вот код С# для извлечения идентификатора пользователя из токена доступа:
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.
предпочтительный способ получения идентификатора пользователя из зашифрованного токена доступа выглядит следующим образом:
try
{
var fb = new FacebookClient(accessToken);
var result = (IDictionary<string, object>)fb.Get("/me?fields=id");
return (string)result["id"];
}
catch (FacebookOAuthException)
{
return null;
}
Ответ 4
Вы можете использовать код ниже onSuccess (LoginResult loginResult)
loginResult.getAccessToken() getUserId();.
Ответ 5
С новейшим 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"]);
Ответ 6
в FacebookSDK v2.1 (я не могу проверить более старую версию). Мы имеем
NSString *currentUserFBID = [FBSession activeSession].accessTokenData.userID;
Однако в соответствии с комментарием в FacebookSDK
@discussion Это не может быть заполнено для поведения входа, такого как системная учетная запись iOS.
Так может быть, вы должны проверить, доступно ли это, а затем использовать ли его или вызвать запрос, чтобы получить идентификатор пользователя
Ответ 7
Вам просто нужно нажать другой API-интерфейс Graph:
https://graph.facebook.com/me?access_token={access-token}
Он также предоставит ваш идентификатор электронной почты и идентификатор пользователя (для Facebook).