У меня есть настольное приложение Facebook и я использую Graph API . Я могу получить токен доступа, но после этого я не знаю, как получить идентификатор пользователя.
Мой поток такой:
Я отправляю пользователя на https://graph.facebook.com/oauth/authorize со всеми необходимыми расширенными разрешениями.
На моей странице перенаправления я получаю код от Facebook.
Затем я выполняю HTTP-запрос к graph.facebook.com/oauth/access_token с моим ключом API и получаю токен доступа в ответе.
С этого момента я не могу получить идентификатор пользователя.
Как решить эту проблему?
https://graph.facebook.com/me?fields=id&access_token=xxxxxx
Самый простой способ
тогда вы получите ответ 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. предпочтительный метод получения идентификатора пользователя из зашифрованного токена доступа следующий:
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)
источник
Вам просто нужно нажать еще один Graph API:
Он также предоставит ваш идентификатор электронной почты и идентификатор пользователя (для Facebook).
источник
С новейшим API, вот код, который я использовал для него
источник
в FacebookSDK v2.1 (старую версию проверить не могу). У нас есть
Однако согласно комментарию в FacebookSDK
@discussion Может не заполняться для поведения входа в систему, такого как системная учетная запись iOS.
Так что, возможно, вам следует проверить, доступен ли он, а затем использовать его или вызвать запрос, чтобы получить идентификатор пользователя
источник
Посмотрите этот ответ , в котором описано, как получить ответ ID. Во-первых, вам нужно создать метод получения данных:
Затем просто используйте свой метод, когда захотите, например:
источник