Facebook JS SDK:有没有办法找出用户是否未接受许可?

时间:2014-01-07 13:16:36

标签: facebook facebook-javascript-sdk

假设我要求用户访问他们的基本公开个人资料信息和朋友列表(默认项目)。这会弹出一个弹出窗口(Accept / Cancel)。另外我要求访问他们管理的粉丝。目前在Facebook上,这将弹出一个SECOND弹出窗口,用户可以点击Skip

如果用户接受了第一个弹出窗口,但点击了第二个弹出窗口(manage_pages),我想提出一条消息,要求他们重新考虑他们的决定,并解释为什么这个权限很重要。< / p>

有没有办法确定用户是否接受了第一个许可,而不是第二个许可?

FB.login(function(response) {

    if(response.status === "connected"){
          //First permission was accepted, but not necesserily 'manage_permissions'
    } else {
         //The entire popup was not accepted
    }

 }, {scope: 'manage_pages'});

2 个答案:

答案 0 :(得分:0)

FB.login调用中的响应对象不包含此信息,因此您需要对/me/permissions进行第二次API调用并查看对此的响应。

快速举例:

FB.login(function(loginResponse) {
    if ('connected' == loginResponse.status) {
        FB.api('/me/permissions', function(permissionResponse) {
            if (!permissionResponse.data[0].manage_pages) {
                console.log('user did not give app manage_pages permission');
            } else {
                console.log('user gave app manage_pages permission');
            }
        });
    }
}, {scope: 'manage_pages'});

答案 1 :(得分:0)

您可以使用用户的访问令牌检索该信息。 Facebook为调试访问令牌提供支持。您可以通过向debug_token连接发出GET请求来检索与特定用户的访问令牌相关的信息。类似的东西:

GET /debug_token?
     input_token={input-token}&
     access_token={access-token}

这将返回以下信息:

{
        "data": {
            "app_id": 000000000000000, 
            "application": "Social Cafe", 
            "expires_at": 1352419328, 
            "is_valid": true, 
            "issued_at": 1347235328, 
            "scopes": [
                "email", 
                "publish_actions"
            ], 
            "user_id": 1207059
        }
    }

如您所见,输出包含有关与访问令牌关联的权限的信息。您可以阅读范围部分以验证用户是否已接受任何扩展权限。您可以在Getting Info about Tokens and Debugging参考中获得有关它的更多信息。