【问题标题】:Get current facebook users id获取当前 facebook 用户 id
【发布时间】:2012-10-14 19:41:17
【问题描述】:

我正在尝试让当前的 facebook 用户获得一个未托管在 .NET 页面中的 Silverlight 游戏,而只是一个 html 页面。 silverlight 游戏将使用他们的 id 作为提交高分的凭据。

我不希望他们使用我的应用登录 Facebook。我希望他们在我的应用程序之外登录到 Facebook。然后我的应用程序使用 Graph API 的 .Get("me") 进行检查。但是,.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)

【问题讨论】:

    标签: facebook-c#-sdk


    【解决方案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"];
    

    【讨论】:

    • 谢谢。看起来需要身份验证才能获取 .Get("me") 中找到的任何公共数据
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢肖恩,我用来自 fiddler2 和 VS2010 的调试信息更新了帖子。我不明白为什么会有 OAuthExceptions。我只想要公开信息。它不应该进行任何身份验证,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多