来自服务器的API调用需要appsecret_proof参数

时间:2014-03-12 17:41:22

标签: android facebook facebook-graph-api android-facebook

我无法使用Android Facebook SDK发出API请求,甚至无法从登录回调中获取用户 - 它始终返回null。

特别是,使用newMeRequest,我收到以下错误消息:

{ "error": {
 "message": "API calls from the server require an appsecret_proof argument", 
 "type": "GraphMethodException", 
 "code": 100   } }

实际上,它似乎非常明显,因为在Facebook应用程序选项中该标志设置为true。但是,我知道移动sdks可以在没有秘密的情况下发出API请求。但是,如果我尝试使用Facebook Graph API调试器中currentSession的访问令牌,则响应将与上述相同。

我不知道这是否与新的Android Facebook SDK有关,但我的代码与示例中的代码基本相同。登录很顺利,我得到会话令牌,但我不能发出任何API请求......

loginButton.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() {
    @Override
    public void onUserInfoFetched(GraphUser user) {
        graphUser = user;
    }
});


Request.newMeRequest(currentSession, new Request.GraphUserCallback() {
    @Override
    public void onCompleted(GraphUser user, Response response) {
    }
    }
}).executeAsync();

4 个答案:

答案 0 :(得分:29)

我能够使其正常工作的唯一方法是在Facebook应用的高级设置中No设置为App Secret proof for API calls

但是,这是一个修复,而不是解决,因为我无法在设置为Yes的选项中执行请求(在iOS facebook sdk中可能)。

答案 1 :(得分:10)

你需要在你的请求中添加一个参数“appsecret_proof”,其中包含accessToken和appSecret的'sha256'哈希

https://developers.facebook.com/docs/graph-api/securing-requests

答案 2 :(得分:5)

您需要在Facebook应用高级设置中停用Require App Secret

答案 3 :(得分:0)

虽然不是您问题的实际答案(因为它不涉及Android SDK),但从 2018年3月开始,似乎仍有一些关于 appsecret_proof 以及来自网页(Javascript)/可能是移动(不确定)客户的电话。

Facebook bug report (February 2018) - issue reappeared

Facebook bug report (October 2016)

Facebook bug report (February 2015)

也就是说,对于启用了需要应用机密的应用程序App Dashboard > Settings > Advanced > Security > Require App Secret,似乎无法在不传递appsecret_proof的情况下执行来自Javascript的API调用 - 写作(2018年3月)。

快速"修复" - 禁用标志。根据要求,还可以选择使用两个Facebook应用程序:一个用于网页/移动呼叫(禁用标志),另一个用于服务器端呼叫(启用标志)。