Facebook oauth / access_tokenがありません

facebook iphone sdk
Facebook oauth / access_tokenがありません

イムが何かを逃しているが、ここに行くならダンノ。 ユーザーのログインを要求せずに、Facebookの特定の公開グループのイベントを検索できるように、アプリケーションのaccess_tokenを取得しようとしています。

これは文字列を返します:access_token = xxxx | ugtqdoWfvvo5_S-Fo2D7_I4rdbc

それは素晴らしいことですが、jsonはありません。 返された文字列がjsonエンコードされていない理由に関する洞察はありますか?

注:Facebook ios SDK関数を次のように使用しています[_facebook requestWithGraphPath:@ “oauth / access_token” andParams:params andHttpMethod:@ “POST” andDelegate:self];

  7  0


ベストアンサー

これは* BUG *です:https://developers.facebook.com/bugs/325262010847554

FacebookのOAuth 2.0実装は明らかに仕様に違反しています:http://tools.ietf.org/html/draft-ietf-oauth-v2-25#section-5.1

サーバー側のWebアプリフローを使用していますが、iOS SDKについて説明したのと同じ問題があります。

5


これは、グラフAPI v2.3で修正されています。 エンドポイントhttps://graph.facebook.com/v2.4/oauth/access_tokenを使用してバージョンを指定します。 +間違ったバージョンのfacebook APIドキュメントに誤って到達するのは簡単です。

2


アクセストークンを抽出し、パイプ文字を適切なエスケープに置き換えるスニペットを次に示します…​

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


ファローアップ。

FB ios SDKを理解する方法は、デリゲート関数がNSArrayやNSDictionnaryなどのオブジェクトを受け取って処理することです。 FB SDKクラスの内部を見ると、SBJSONパーサーを使用してすべての応答が解析されているようです。 応答がjsonでない場合、それは失敗します。

[_facebook requestWithGraphPath:@”261247595170″ andDelegate:self];
素敵なjsonを返します。 問題ありません。

[_facebook requestWithGraphPath:@ “oauth / access_token” andParams:params andHttpMethod:@ “POST” andDelegate:self];返された文字列。 SBJSONパーサーは失敗します。

これは、FBグラフサービスの不整合のようです。

この問題を処理する特別な関数を作成することもできますが、FBが文字列の形式を変更することを決定した場合、すべてのIPhoneアプリは動作を停止し、更新する必要があります。 クールではありません。

0


_
返された文字列がjsonエンコードされていない理由に関する洞察はありますか?
_

ええ、アクセストークンはJSONエンコードされることになっていない。 とにかく、単一の文字列をJSONエンコードすることには、ほとんど価値がありません。

なぜそうなると期待しているのですか?

私はこれについて誤解されたようです。 仕様には、application / jsonが応答本文に使用されることが記載されています。

-1


Facebook SDKを使用している場合、NSArrayとNSDictionnaryを返すと思います

私は間違っているかもしれませんが、 `objectForKey:@” access_token “`で試してください

-1


タイトルとURLをコピーしました