0

.NETページではなくhtmlページでホストされているSilverlightゲームの現在のFacebookユーザーを取得しようとしています。Silverlightゲームは、ハイスコアを送信するためのクレデンシャルとしてIDを使用します。

私のアプリを使ってFacebookにログインしてほしくない。アプリの外でFacebookにログインしてもらいたい。次に、私のアプリはGraph APIの.Get( "me")を使用してチェックします。ただし、.Get( "me")は常にnullを返します。facebookClientにアプリアクセストークンまたはappid+secretがある場合でも。

私はC#facebook sdkバージョン5.4.1.0(SL4サポート用)を使用しています。

これは私がappid+secretを使ってそれをやろうとする方法です:

        var app = new Facebook.FacebookClient(appId, appSecret);
        app.GetCompleted += new EventHandler<Facebook.FacebookApiEventArgs>(app_GetCompleted);
        app.GetAsync("me");
    }

    void app_GetCompleted(object sender, Facebook.FacebookApiEventArgs e)
    {
        //the value of me below is always null
        var me = e.GetResultData() as IDictionary<string, object>;
        string id = (string)me["id"];
    }

他のサイトによると、アプリのアクセストークンは、現在のFacebookユーザーのIDを取得するのに十分すぎるはずです。

現在のFacebookユーザーIDを取得するために私は何を間違っている/誤解していますか?

編集:デバッグ情報

Fiddler2の結果404:

  "message": "(#803) Some of the aliases you requested do not exist: clientaccesspolicy.xml",
  "type": "OAuthException",
  "code": 803

Fiddler2の結果400:

  "message": "An active access token must be used to query information about the current user.",
  "type": "OAuthException",
  "code": 2500

FacebookApiEventArgs e.Error.Message:

Value cannot be null.  Parameter name: stream

FacebookApiEventArgs e.Error.StackTrace:

at System.IO.StreamReader..ctor(Stream stream, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean leaveOpen)
   at System.IO.StreamReader..ctor(Stream stream)
   at Facebook.FacebookClient.ProcessResponse(HttpHelper httpHelper, Stream responseStream, Type resultType, String& responseStr, Exception& exception, Boolean& cancelled)
4

2 に答える 2

1

上記のコードを実行しながらFiddlerを実行してみてください。その後、Facebookからの応答を期待できます。たとえば、FacebookOAuthExceptionsです。

http://www.fiddler2.com/fiddler2/version.asp

于 2012-05-22T04:44:13.053 に答える
1

Facebook C#SDKの使用:

string signedRequest = Request.Form["signed_request"];
var DecodedSignedRequest = FacebookSignedRequest.Parse(Facebook.Web.FacebookWebContext.Current.Settings.AppSecret, signedRequest);
dynamic SignedRequestData = DecodedSignedRequest.Data;
accessToken = (String)SignedRequestData.oauth_token;
var app = new FacebookWebClient();
var me = (IDictionary<string, object>)app.Get("me");
firstName = (string)me["name"];
U_Id = (string)me["id"];
于 2012-10-14T06:36:04.647 に答える