OAuthException(#15)“尝试发布成就时,必须使用app access_token调用此方法”

时间:2011-09-09 16:23:32

标签: facebook http post achievements

我经常收到OAuthException(#15)“尝试以下列方式注册我的应用程序的成就时,必须使用app 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方法更改为'get',我会收到一个存储注册成就的数组。

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

3 个答案:

答案 0 :(得分:0)

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

希望这会有所帮助

答案 1 :(得分:0)

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

注意:即使你在调用FB.api()时指定了相应的'method'值,也不要期望POST请求出现在你的嗅探器中(就像我做的那样:)) - 你会看到任何方式得到一个。这是一种强制性的解决方法,它可以工作。

答案 2 :(得分:0)

我对此问题的解决方法是使用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);

?>