服务器的API调用需要一个appsecret_proof参数。

22

我无法使用Android Facebook SDK进行API请求,甚至无法从登录回调中获取用户 - 它总是返回null。

特别是在newMeRequest中,我得到了以下错误消息:

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

实际上,这似乎很明显,因为Facebook应用程序选项中的标志已设置为true。然而,我知道对于移动sdk,可以在没有secret的情况下进行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();

我遇到了相同的错误,请问你是如何解决的?请帮帮我,这很紧急。 - Ashish Agrawal
4个回答

39

我只能通过在 Facebook 应用的高级设置中将 API 调用的应用程序密钥证明 设置为 No,才能让它运行。

不过这只是一种解决方法而非根本解决方法,因为我无法在选项设置为 Yes 时发出请求(就像在 iOS Facebook SDK 中可以做到的那样)。


1
这个安全吗?禁用该选项会带来哪些安全风险? - user2804865
@dwbrito 这个选项默认是禁用的。我认为这个选项“增强”了安全性。如果你关闭这个选项,这并不意味着你的FB应用程序“不安全”。 - Will Huang

17

奇怪的是,现在的URL看起来像这样:https://developers.facebook.com/docs/graph-api/securing-requests%20/。我之所以说奇怪,是因为很少有URL中包含%20(除此之外,它与您的URL相同)... - John

8
您需要在Facebook应用程序高级设置中禁用“要求应用程序秘密”。

2
这个安全吗?禁用该选项会带来哪些安全风险? - user2804865
非常感谢。问题得到解决了。但就安全方面而言,它是否足够好呢? - Bhavin Thummar

1
虽然这并不是你问题的实际答案(因为它不涉及Android SDK),但截至2018年3月,似乎仍存在一些问题,涉及appsecret_proof和来自网页(Javascript)/可能是移动客户端(不确定)的调用。

Facebook错误报告(2018年2月)-问题重新出现

Facebook错误报告(2016年10月)

Facebook错误报告(2015年2月)

也就是说,对于启用了需要应用程序密钥的应用程序,App Dashboard > Settings > Advanced > Security > Require App Secret,在写作时(2018年3月),似乎无法从Javascript执行API调用而不传递appsecret_proof

快速“修复”-禁用标志。根据要求,也可以选择拥有两个Facebook应用程序:一个用于网页/移动电话调用(禁用标志),另一个用于服务器端调用(启用标志)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接