我无法使用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();
答案 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应用程序:一个用于网页/移动呼叫(禁用标志),另一个用于服务器端呼叫(启用标志)。