获取当前的Facebook用户ID

时间:2012-05-22 04:10:28

标签: facebook-c#-sdk

我正在尝试让当前的Facebook用户获得一个不在.NET页面中托管的银色游戏,只是一个html页面。 Silverlight游戏将使用他们的身份证作为提交高分的凭证。

我不希望他们使用我的应用程序登录Facebook。我希望他们在我的应用程序之外登录Facebook。然后我的应用程序使用Graph API的.Get(“我”)进行检查。但是,.Get(“me”)始终返回null。即使facebookClient有App访问令牌或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)

2 个答案:

答案 0 :(得分:1)

在执行上述代码时尝试运行Fiddler。然后,您可以期待从Facebook回复。例如,Facebook OAuthExceptions。

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

答案 1 :(得分: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"];