2010-10-05 2 views
7

Dunno si je manque quelque chose mais ici va. Im essayant d'obtenir un access_token pour mon application pour qu'il puisse aller chercher des événements pour certains groupes publics sur facebook, sans que l'utilisateur d'être connecté.Facebook oauth/access_token manquant

Im essayant d'obtenir un access_token de https://graph.facebook.com/oauth/access_token?client_secret=foobar&client_id=foobar&grant_type=client_credentials&format=json&sdk=ios

Cela renvoie une chaîne: access_token = xxxx | ugtqdoWfvvo5_S-Fo2D7_I4rdbc

C'est gentil et tout, mais ce n'est pas le cas. Avez-vous une idée de la raison pour laquelle la chaîne renvoyée n'est pas codée en json?

Note: Im en utilisant la fonction ios SDK Facebook comme si [_facebook requestWithGraphPath: @ "OAuth/access_token" andParams: params andHttpMethod: @ "POST" andDelegate: auto];

Répondre

-1

Vous ne savez pas pourquoi la chaîne renvoyée n'est pas codée en json?

Oui, le jeton d'accès n'est pas censé être codé en JSON. Et il y a sans doute peu de valeur dans le codage JSON d'une seule chaîne de toute façon.

Pourquoi l'attendez-vous?

Semble que j'ai été mal informé à ce sujet. La spécification indique que application/json doit être utilisé pour le corps de la réponse.

+0

Donc vous dites que nous devons écrire nos propres analyseurs pour gérer la réponse? –

+0

Maintenant, je suis confus - vous n'avez pas besoin d'analyser le jeton d'accès pour tout ce que je sais. Qu'est-ce que vous essayez de sortir de l'analyse du jeton d'accès? –

+1

-1 Ceci est faux. Il est supposé être codé en JSON et cette attente est basée sur la spécification: http://tools.ietf.org/html/draft-ietf-oauth-v2-25#section-5.1 – jkoreska

-1

Si vous utilisez Facebook SDK, je crois qu'ils reviennent NSArray et NSDictionnary

Je peux me tromper, mais essayez avec un objectForKey:@"access_token"

0

Suivi. La façon dont je comprends le FB ios SDK est que votre fonction de délégué recevra un objet tel que NSArray ou NSDictionnary pour travailler avec. En regardant dans les internes des classes FB SDK il semble que toutes les réponses sont analysées en utilisant l'analyseur SBJSON. Si la réponse n'est pas json que cela échouera.

[_facebook requestWithGraphPath: @ "261247595170" etDelegate: self]; renvoie nice json. Aucun problème là-bas.

[_facebook requestWithGraphPath: @ "oauth/access_token" etParams: params etHttpMethod: @ "POST" etDelegate: self]; Chaîne renvoyée. L'analyseur SBJSON échoue.

Cela semble être une incohérence dans le service de graphe FB.

On pourrait écrire une fonction spéciale pour gérer ce problème, mais si FB décide de changer le format de la chaîne, alors toutes les applications iPhone cesseront de fonctionner et devront être mises à jour. Pas cool.

1

Voici un extrait pour extraire votre jeton d'accès et de remplacer le caractère pipe à l'évasion bon ...

NSURL *accessTokenURL = [NSURL URLWithString:@"https://graph.facebook.com/oauth/access_token?client_id=XXXXXXXXXXXXX&client_secret=XXXXXXXXXXXXXXXXXXX&grant_type=client_credentials"]; 
NSString *accessTokenResponse = [NSString stringWithContentsOfURL:accessTokenURL encoding:NSUTF8StringEncoding error:NULL]; 
if(accessTokenResponse != nil) { 
    NSMutableString *accessToken = [NSMutableString stringWithString:[accessTokenResponse substringFromIndex:13]]; 
    [accessToken replaceOccurrencesOfString:@"|" withString:@"%7C" options:NSLiteralSearch range:NSMakeRange(0, [accessToken length])]; 
} 
1

Ceci est corrigé à partir de la version 2.3 du graphique api. Spécifiez la version à l'aide du point de terminaison https://graph.facebook.com/v2.4/oauth/access_token.
Il est facile d'atterrir accidentellement sur la mauvaise version des docs de l'API facebook.