2010-10-05 2 views
7

weiß nicht, ob Im fehlt etwas, aber hier geht. Im Versuch, eine access_token für meine Anwendung zu bekommen, so dass es gehen kann und Veranstaltungen für bestimmte öffentliche Gruppen auf Facebook nachschlagen, ohne dass ein Benutzer angemeldet sein.Facebook oauth/access_token fehlt

Im einen access_token von https://graph.facebook.com/oauth/access_token?client_secret=foobar&client_id=foobar&grant_type=client_credentials&format=json&sdk=ios

zu bekommen versuchen,

Dies gibt eine Zeichenfolge zurück: access_token = xxxx | ugtqdoWfvvo5_S-Fo2D7_I4rdbc

Das ist nett und alles, aber es ist kein Json. Irgendwelche Erkenntnisse darüber, warum die zurückgegebene Zeichenfolge nicht json-codiert ist?

Hinweis: Im die ios SDK-Funktion über Facebook wie so [_facebook requestWithGraphPath: @ "oauth/access_token" andParams: params andHttpMethod: @ "POST" andDelegate: self];

Antwort

-1

Irgendwelche Erkenntnisse darüber, warum die zurückgegebene Zeichenfolge nicht json codiert ist?

Ja, das Zugriffstoken soll nicht JSON-codiert sein. Und es gibt wohl wenig Wert in irgendeiner Weise einen einzelnen String JSON-kodiert.

Warum erwarten Sie, dass es so ist?

Scheint, ich wurde darüber falsch informiert. Die Spezifikation besagt, dass die Anwendung/json für den Antworttext verwendet werden soll.

+0

Sie sagen also, wir müssen dann unsere eigenen Parser schreiben, um die Antwort zu behandeln? –

+0

Jetzt bin ich verwirrt - Sie müssen das Zugriffstoken für nichts, was ich weiß, nicht analysieren. Was versuchen Sie, das Zugriffstoken zu analysieren? –

+1

-1 Dies ist falsch. Es soll JSON-codiert sein und diese Erwartung basiert auf der Spezifikation: http://tools.ietf.org/html/draft-ietf-oauth-v2-25#section-5.1 – jkoreska

-1

Wenn Sie mit Facebook SDK, ich glaube, dass sie zurückkommen NSArray und NSDictionnary

Ich könnte falsch sein, aber versuchen, mit einem objectForKey:@"access_token"

0

Follow-up.

Die Art, wie ich das FB ios SDK verstehe, ist, dass Ihre Delegate-Funktion ein Objekt wie NSArray oder NSDictionary erhalten wird. Ein Blick in die Interna der FB SDK-Klassen scheint es, dass alle Antwort analysiert werden, um den SBJSON Parser verwenden. Wenn die Antwort nicht json ist, schlägt das fehl.

[_facebook requestWithGraphPath: @ "261247595170" andDelegate: self]; kehrt schön json. Keine Probleme dort.

[_facebook requestWithGraphPath: @ "oauth/access_token" andParams: params andHttpMethod: @ "POST" andDelegate: self]; String zurückgegeben. SBJSON-Parser schlägt fehl.

Dies scheint eine Inkonsistenz im FB-Grafikdienst zu sein.

Man könnte eine spezielle Funktion schreiben, um dieses Problem zu lösen, aber wenn FB entscheidet, das Format der Zeichenkette zu ändern, dann würde alle IPhone App aufhören zu arbeiten, und muss aktualisiert werden. Nicht cool.

1

Hier ist ein Ausschnitt Ihrer Zugriffstoken zu extrahieren und das Pipe-Zeichen mit der richtigen Flucht ersetzen ...

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])]; 
}