【问题标题】:OAuthException (#15) "This method must be called with an app access_token" while trying to post achievementOAuthException (#15) “此方法必须使用应用程序 access_token 调用”,同时尝试发布成就
【发布时间】:2011-09-09 16:23:31
【问题描述】:

在尝试通过以下方式为我的应用注册成就时,我不断收到 OAuthException (#15)“此方法必须使用应用 access_token 调用”:

FB.api("/APP_ID/achievements",
'post',
{achievement: FULL_ACHIEVEMENT_URL, access_token: ACCESS_TOKEN, display_order: 1},
function(response){
    getFlashMovieObject(referrer).fbDataCallback(response);
});

成就文件结构已经过验证并且是正确的,ACCESS_TOKEN 值也可以 - 如果我将 HTTP 方法更改为“获取”,我会收到一个存储已注册成就的数组。

您能告诉我如何使用 JS API 方法正确注册成就吗?

【问题讨论】:

标签: facebook http post achievements


【解决方案1】:

您不能调用需要来自客户端 SDK(例如 javascript SDK)的应用访问令牌的方法。 Javascript SDK 将始终为 API 调用隐式发送用户访问令牌。这是出于安全原因而设计的。

希望对你有帮助

【讨论】:

  • 似乎这不是原因 - 正如我上面提到的,具有相同访问令牌所需的“获取”请求成功返回实际数据。
  • "get" 请求是一种不同的方法,它只是列出了成就,它的限制可能较少(不需要应用访问令牌)。
  • 您对“get”请求的限制是正确的,但实际上,如果没有传递“access_token”变量,用户访问令牌会添加到 JS API 调用的参数中。我传递了我的应用访问令牌,嗅探器证明它就是那个出去的。
【解决方案2】:

似乎没有答案。我今天再次尝试了它 - 它只是开始工作。)

注意:即使您在调用 FB.api() 时指定了相应的“方法”值,也不要期望 POST 请求会出现在您的嗅探器中(就像我所做的那样:)) - 无论如何您都会看到得到一个。这是一种强制的解决方法,并且有效。

【讨论】:

    【解决方案3】:

    我对这个问题的解决方案是使用 PHP 获取 APP 访问令牌,然后将该令牌作为 post 对象的一部分传递。 USER 访问令牌将不起作用。

    我必须为我正在构建的 Flash 游戏执行此操作,该游戏通过外部接口使用 Javascript SDK。您无法使用 Javascript 获取应用访问令牌,因为您会泄露应用机密,这是一个安全问题。

    <?php
    
    $APPLICATION_ID = YOUR_APP_ID;
    $APPLICATION_SECRET = YOUR_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);
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2012-04-06
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 2011-12-11
      • 2012-11-22
      • 1970-01-01
      相关资源
      最近更新 更多