Mam aplikację komputerową Facebook i używam Graph API . Jestem w stanie zdobyć token dostępu, ale po tym - nie wiem, jak uzyskać identyfikator użytkownika.
Mój przepływ jest taki:
Wysyłam użytkownika na https://graph.facebook.com/oauth/authorize ze wszystkimi wymaganymi rozszerzonymi uprawnieniami.
Na mojej stronie przekierowującej otrzymuję kod z Facebooka.
Następnie wykonuję żądanie HTTP do graph.facebook.com/oauth/access_token z moim kluczem API i otrzymuję token dostępu w odpowiedzi.
Od tego momentu nie mogę uzyskać identyfikatora użytkownika.
Jak można rozwiązać ten problem?
facebook
facebook-graph-api
Mohoch
źródło
źródło
https://graph.facebook.com/me?fields=id&access_token=xxxxxx
Najłatwiej jest
wtedy otrzymasz odpowiedź json, która zawiera tylko identyfikator użytkownika.
źródło
Token dostępu do Facebooka również wygląda podobnie „1249203702 | 2.h1MTNeLqcLqw __. 86400.129394400-605430316 | -WE1iH_CV-afTgyhDPc”
jeśli wyodrębnisz środkową część za pomocą | się podzielić
2.h1MTNeLqcLqw __. 86400.129394400-605430316
następnie podziel ponownie przez -
ostatnia część 605430316 to identyfikator użytkownika.
Oto kod C # służący do wyodrębniania identyfikatora użytkownika z tokenu dostępu:
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; }
OSTRZEŻENIE: Struktura tokena dostępu nie jest udokumentowana i może nie zawsze pasować do powyższego wzorca. Używaj go na własne ryzyko.
Aktualizacja Ze względu na zmiany na Facebooku. preferowana metoda pobierania identyfikatora użytkownika z zaszyfrowanego tokena dostępu jest następująca:
try { var fb = new FacebookClient(accessToken); var result = (IDictionary<string, object>)fb.Get("/me?fields=id"); return (string)result["id"]; } catch (FacebookOAuthException) { return null; }
źródło
Możesz użyć poniższego kodu na onSuccess (LoginResult loginResult)
źródło
Musisz tylko trafić w inny Graph API:
Poda również Twój adres e-mail i identyfikator użytkownika (dla Facebooka).
źródło
W przypadku najnowszego API, oto kod, którego użyłem do tego
źródło
w FacebookSDK v2.1 (nie mogę sprawdzić starszej wersji). Mamy
Jednak zgodnie z komentarzem na FacebookuSDK
@discussion To może nie być wypełnione dla zachowań związanych z logowaniem, takich jak konto systemu iOS.
Może więc powinieneś sprawdzić, czy jest dostępny, a następnie użyć go, lub wywołać żądanie uzyskania identyfikatora użytkownika
źródło
Sprawdź tę odpowiedź , która opisuje, jak uzyskać odpowiedź na identyfikator. Najpierw musisz stworzyć metodę get data:
Następnie po prostu użyj swojej metody, kiedy chcesz, na przykład:
źródło