Как получить идентификатор пользователя Facebook с помощью маркера доступа
У меня есть настольное приложение Facebook и с помощью Graph API. Я могу получить маркер доступа, но после этого - я не знаю, как получить идентификатор пользователя.
мой такой:
Я отправляю пользователя на https://graph.facebook.com/oauth/authorize со всеми необходимыми расширенными разрешениями.
на моей странице перенаправления я получаю код от Фейсбук.
затем я выполняю HTTP-запрос к graph.facebook.com/oauth/access_token с моим ключом API, и я получаю маркер доступа в ответе.
с этого момента я не могу получить идентификатор пользователя.
Как можно решить эту проблему?
7 ответов:
Если вы хотите использовать Graph API для получения текущего идентификатора пользователя, просто отправьте запрос:
https://graph.facebook.com/me?access_token=...
самый простой способ-это
https://graph.facebook.com/me?fields=id&access_token="xxxxx"
тогда вы получите ответ json, который содержит только идентификатор пользователя.
токен Facebook acess тоже похож "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. предпочтительный способ получить идентификатор пользователя из зашифрованного маркера доступа выглядит следующим образом:
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"]);
вы просто должны нажать другой график API:
https://graph.facebook.com/me?access_token={access-token}
Он также даст Ваш идентификатор электронной почты и идентификатор пользователя (для Facebook).
в FacebookSDK v2.1 (я не могу проверить старую версию). У нас есть
NSString *currentUserFBID = [FBSession activeSession].accessTokenData.userID;
однако согласно комментарию в FacebookSDK
@обсуждение это может быть не заполнено для поведения входа в систему, таких как системная учетная запись iOS.
Так может быть, вы должны проверить, если это доступно, и то ли использовать его, или вызвать запрос, чтобы получить идентификатор пользователя