尝试在画布应用程序中发布Facebook得分时访问令牌错误

时间:2011-09-04 15:57:07

标签: facebook facebook-c#-sdk

我正在尝试将我的画布应用程序中的评分系统与Facebook集成,使用MVC 3和5.2.1.0 Facebook SDK实现。

我的游戏控制器的简化hello-world变体如下所示:

public class MyController : Controller
{
  [CanvasAuthorize("publish_action" /*And some others*/)]
  public ActionResult Index()
  {
    var fb = new FacebookWebClient();
    var scores = fb.Get("/me/scores"); // Works (I think)
    fb.Post("/me/scores", new { score = 10 }); // Throws an exception
  }
}

获得分数的呼吁看起来像是给了我一些明智的东西;写入分数值的调用抛出“(OAuthException)(#15)必须使用app access_token调用此方法。”

我错过了什么?应用程序ID和密码在我的web.config中正确设置 - 例如,我可以在实际应用程序的其他部分中成功发布应用程序apprequest,这些部分未在此精简测试副本中显示。使用调试器进行彻底修改显示FacebookWebClient对象包含非空访问令牌字段,并且包含在fb.Post最终使用的URI中。

Facebook得分页面(Björn链接到)仅提及publish_actions,但我尝试包含其他相关的声音权限,例如offline_access和user_games_activity无效。

我假设CanvasAuthorize属性正确地进行了登录 - 它似乎让我发送了一个应用程序apprequest,所以它看起来好像在做正确的事情......

2 个答案:

答案 0 :(得分:0)

您的应用需要获得写入用户个人资料的权限。您可以使用Graph API从用户请求所需的权限。如果获得批准,Facebook将为您提供所需的访问令牌,然后您可以在Facebook的请求中使用该令牌。这种做法可确保您只执行用户允许的操作。

编辑_:查看文档后:您确定自己拥有用户所需的权限,如http://developers.facebook.com/docs/score/所述吗?

答案 1 :(得分:0)

请看这个链接。你需要获得一个Facebook应用程序。使用apiId和SecretId,您可以使用以下链接中的信息发布。关键是将& scope = manage_pages,offline_access,publish_stream添加到网址。

像这样: “https://graph.facebook.com/oauth/access_token?client_id= {0}&安培; client_secret = {1}&安培; grant_type = client_credentials&安培;范围= manage_pages,offline_access,publish_stream”;