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

时间:2011-12-19 08:04:11

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

我正在使用带有代码的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);
}

2 个答案:

答案 0 :(得分:0)

<强>答案: -

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

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

然后用旧的access_token替换生成的application_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中。

答案 1 :(得分:0)

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

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