Comment obtenir l’ID utilisateur Facebook en utilisant le jeton d’access

J’ai une application de bureau Facebook et j’utilise l’ API Graph . Je peux obtenir le jeton d’access, mais après cela, je ne sais pas comment obtenir l’identifiant de l’utilisateur.

Mon stream est comme ceci:

  1. J’envoie l’utilisateur à https://graph.facebook.com/oauth/authorize avec toutes les permissions étendues requirejses.

  2. Dans ma page de redirection, je reçois le code de Facebook.

  3. Ensuite, j’effectue une requête HTTP à graph.facebook.com/oauth/access_token avec ma clé API et j’obtiens le jeton d’access dans la réponse.

À partir de là, je ne parviens pas à obtenir l’ID utilisateur.

Comment résoudre ce problème?

Si vous souhaitez utiliser l’API graphique pour obtenir l’ID utilisateur actuel, envoyez simplement une demande à:

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

Le plus simple est

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

alors vous obtiendrez une réponse json qui ne contient que l’ID utilisateur.

Le jeton Facebook acess est similaire “1249203702 | 2.h1MTNeLqcLqw __. 86400.129394400-605430316 | -WE1iH_CV-afTgyhDPc”

si vous extrayez la partie centrale en utilisant | se partager

2.h1MTNeLqcLqw __. 86400.129394400-605430316

puis divisé à nouveau par –

la dernière partie 605430316 est l’ID utilisateur.

Voici le code C # pour extraire l’ID utilisateur du jeton d’access:

  public long ParseUserIdFromAccessToken(ssortingng accessToken) { Contract.Requires(!ssortingng.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 (!ssortingng.IsNullOrEmpty(idPart)) { var index = idPart.LastIndexOf('-'); if (index >= 0) { ssortingng id = idPart.Subssortingng(index + 1); if (!ssortingng.IsNullOrEmpty(id)) { return id; } } } } return null; } 

AVERTISSEMENT: la structure du jeton d’access n’est pas documentée et peut ne pas toujours correspondre au modèle ci-dessus. Utilisez à vos risques et périls.

Mise à jour En raison de changements dans Facebook. la méthode préférée pour obtenir l’ID utilisateur à partir du jeton d’access chiffré est la suivante:

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

Vous pouvez utiliser le code ci-dessous sur onSuccess (LoginResult loginResult)

loginResult.getAccessToken (). getUserId ();

Avec la dernière API, voici le code que j’ai utilisé pour cela

 /*params*/ NSDictionary *params = @{ @"access_token": [[FBSDKAccessToken currentAccessToken] tokenSsortingng], @"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"]); 

Il vous suffit de cliquer sur une autre API Graph:

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

Il donnera également votre identifiant de messagerie et votre identifiant utilisateur (pour Facebook).

dans FacebookSDK v2.1 (je ne peux pas vérifier l’ancienne version). Nous avons

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

Cependant, selon le commentaire dans FacebookSDK

@discussion Cela peut ne pas être renseigné pour les comportements de connexion tels que le compte système iOS.

Donc peut-être que vous devriez vérifier si elle est disponible, et ensuite l’utiliser ou appeler la demande pour obtenir l’ID utilisateur