【问题标题】:(OAuthException) An active access token must be used to query information about the current user(OAuthException) 必须使用活动访问令牌来查询有关当前用户的信息
【发布时间】:2012-01-23 10:06:01
【问题描述】:

我正在使用带有代码的 Facebook C# sdk,

我正在尝试为用户创建一个新分数

但我收到此错误:

(OAuthException) 必须使用活动访问令牌来查询有关当前用户的信息。

我错过了什么?

protected void btnAddScore_Click(object sender, EventArgs e)
{
    if (CanvasAuthorizer.Authorize())
    {
        var fb = new FacebookWebClient();
        dynamic parameters = new ExpandoObject();
        parameters.score = 77;
        parameters.access_token = GetAppAccessToken();
        try
        {
            dynamic id = fb.Post("me/scores", parameters);
            lblPostMessageResult.Text = "Message posted successfully";
            txtMessage.Text = string.Empty;
        }
        catch (FacebookApiException ex)
        {
            lblPostMessageResult.Text = ex.Message;
        }
    }
}
private string GetAppAccessToken()
{
    var oauthClient = new FacebookOAuthClient
    {
        AppId = FacebookWebContext.Current.Settings.AppId,
        AppSecret = FacebookWebContext.Current.Settings.AppSecret
    };

    dynamic result = oauthClient.GetApplicationAccessToken();
    string appAccessToken = result.access_token;
    return appAccessToken;
}

编辑: 我在这里得到了答案: http://facebooksdk.codeplex.com/discussions/279307

新的正确代码是:

if (CanvasAuthorizer.Authorize())
{
    var fb = new FacebookClient(CanvasAuthorizer.FacebookWebRequest.AccessToken);

    var oauthClient = new FacebookOAuthClient(FacebookApplication.Current);

    dynamic parameters = new ExpandoObject();
    parameters.score = 100;
    dynamic ac = oauthClient.GetApplicationAccessToken();
    parameters.access_token = ac.access_token;
    dynamic result = fb.Post(CanvasAuthorizer.FacebookWebRequest.UserId + "/scores", parameters);
}

【问题讨论】:

    标签: c# facebook facebook-c#-sdk


    【解决方案1】:

    您的应用程序需要获得用户的“publish_actions”权限才能更新分数。

    请参阅以下文档的为用户创建或更新分数部分。 https://developers.facebook.com/docs/score/

    【讨论】:

      【解决方案2】:

      答案:-

      实际上,要使用 SCORE Graph API,您需要不同于普通访问令牌的“应用程序访问令牌”

      因此,如果您希望完成任务,请使用以下脚本获取应用程序访问令牌......

      然后将生成的application_access_token替换成旧的access_token,就这样

      下面的代码是用php写的,尝试用c#转换然后应用

      $APPLICATION_ID = "APP_ID";
      $APPLICATION_SECRET = "APP_SECRET";
      
      $token_url =    "https://graph.facebook.com/oauth/access_token?" .
                      "client_id=" . $APPLICATION_ID .
                      "&client_secret=" . $APPLICATION_SECRET .
                      "&grant_type=client_credentials";
      $app_token = file_get_contents($token_url);
      

      获得此应用程序访问令牌后,您可以轻松完成此任务。

      当您需要应用程序访问令牌时

      当您有一个代表应用程序而不是代表特定用户的进程时,您需要使用 Facebook 应用程序访问令牌。当您通过图表访问应用的 Facebook Insights 数据时,以及想要为应用创建测试 Facebook 用户时,就会发生这种情况。

      遗憾的是,这方面的文档隐藏在 Facebook 图形 API 的 authentication guide 中。

      【讨论】:

        猜你喜欢
        • 2013-07-22
        • 1970-01-01
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        • 2013-01-26
        • 1970-01-01
        相关资源
        最近更新 更多