developers - Cómo obtener el ID de usuario de Facebook con el token de acceso
obtener access token facebook (7)
Tengo una aplicación de escritorio de Facebook y estoy usando Graph API . Puedo obtener el token de acceso, pero una vez hecho esto, no sé cómo obtener la identificación del usuario.
Mi flujo es así:
Envío al usuario a https://graph.facebook.com/oauth/authorize con todos los permisos extendidos requeridos.
En mi página de redirección obtengo el código de Facebook.
Luego realizo una solicitud HTTP para graph.facebook.com/oauth/access_token con mi clave API y obtengo el token de acceso en la respuesta.
Desde ese momento, no puedo obtener la identificación del usuario.
¿Cómo se puede resolver este problema?
Con la API más nueva, aquí está el código que utilicé para ello
/*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"]);
El token facebook acess también es similar "1249203702 | 2.h1MTNeLqcLqw __. 86400.129394400-605430316 | -WE1iH_CV-afTgyhDPc"
si extraes la parte media usando | para dividir obtienes
2.h1MTNeLqcLqw __. 86400.129394400-605430316
luego dividir de nuevo por -
la última parte 605430316 es la identificación de usuario.
Aquí está el código C # para extraer la identificación del usuario del token de acceso:
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;
}
ADVERTENCIA: La estructura del token de acceso no está documentada y es posible que no siempre se ajuste al patrón anterior. Úselo bajo su propio riesgo.
Actualización debido a cambios en Facebook. El método preferido para obtener el ID de usuario del token de acceso cifrado es el siguiente:
try
{
var fb = new FacebookClient(accessToken);
var result = (IDictionary<string, object>)fb.Get("/me?fields=id");
return (string)result["id"];
}
catch (FacebookOAuthException)
{
return null;
}
La forma más fácil es
https://graph.facebook.com/me?fields=id&access_token="xxxxx"
entonces obtendrá una respuesta json que solo contiene el ID de usuario.
Puede usar el siguiente código en onSuccess (LoginResult loginResult)
loginResult.getAccessToken (). getUserId ();
Si desea usar Graph API para obtener la ID de usuario actual, simplemente envíe una solicitud a:
https://graph.facebook.com/me?access_token=...
Solo tienes que presionar otra Graph API:
https://graph.facebook.com/me?access_token={access-token}
Le dará también su ID de correo electrónico y su ID de usuario (para Facebook).
en FacebookSDK v2.1 (no puedo verificar la versión anterior). Tenemos
NSString *currentUserFBID = [FBSession activeSession].accessTokenData.userID;
Sin embargo, según el comentario en FacebookSDK
@discussion Esto no puede completarse para comportamientos de inicio de sesión como la cuenta del sistema iOS.
Por lo tanto, puede ser que deba verificar si está disponible, y luego si usarlo, o llamar a la solicitud para obtener la identificación del usuario.