Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook SDK for Javascript,FB.login()回调未启动(异步调用从未得到响应?)_Javascript_Facebook_Facebook Graph Api_Facebook Javascript Sdk_Facebook Ads Api - Fatal编程技术网

Facebook SDK for Javascript,FB.login()回调未启动(异步调用从未得到响应?)

Facebook SDK for Javascript,FB.login()回调未启动(异步调用从未得到响应?),javascript,facebook,facebook-graph-api,facebook-javascript-sdk,facebook-ads-api,Javascript,Facebook,Facebook Graph Api,Facebook Javascript Sdk,Facebook Ads Api,下面的代码是到目前为止我的Facebook APIjavascript。它非常简单,有一堆console.log()s来跟踪代码流。(我认识到命名参数response和response2是一种糟糕的做法,但这正是我现在快速提出的避免命名冲突的方法) 目前,FB.init()成功,FB.getLoginStatus()工作,两个FB.api()调用工作,但FB.login()从未发生。它是异步的,因此console.log()s就在执行之前和之后。总而言之,我的控制台输出是: 就在这里 这里也有

下面的代码是到目前为止我的Facebook API
javascript
。它非常简单,有一堆
console.log()
s来跟踪代码流。(我认识到命名参数response和response2是一种糟糕的做法,但这正是我现在快速提出的避免命名冲突的方法)

目前,
FB.init()
成功,
FB.getLoginStatus()
工作,两个
FB.api()
调用工作,但
FB.login()
从未发生。它是异步的,因此
console.log()
s就在执行之前和之后。总而言之,我的控制台输出是:

就在这里
这里也有
权限: 对象{数据:数组[37]} 很高兴见到你,我的名字在这里

我猜这是因为async
FB.login()
调用从未得到响应,因此回调从未触发,因此函数内部没有
console.log()
s。但是我需要这个
FB.login()
来获得扩展权限
ads\u管理
。你知道哪里出了问题,或者至少知道自己解决这个问题的方向吗

window.fbAsyncInit = function() {

  FB.init({
    appId: 'my-app-id-is-here',
    xfbml: true,
    version: 'v2.0'
  });

  FB.getLoginStatus(function(response) {

    if (response.status === 'connected') {

      FB.api('/me', function(response2) {
        console.log("Good to see you, " + response2.name + ".");
      });

      FB.api('/me/permissions', function(response2) {
        console.log("Permissions:");
        console.log(response2);
      });

      console.log("makes it here");
      FB.login(function(response2) {
        console.log("why not here?");
        if (response2.authResponse) {
          console.log("Response to login asking for ads_management permission");
          console.log(response2);
        } else {
          console.log("User cancelled login or did not fully authorize.");
        }
      }, {
        scope: 'ads_management',
        return_scopes: true
      });
      console.log("makes it here too");

    } else {

      // filled with other code that doesn't effect this question yet

    }

  });
};
更新: 去掉参数参数
{scope:'ads_management',return_scopes:true}
至少会尝试调用
FB.login()
,但控制台中现在出现错误:

“当用户已连接时调用FB.login()。”


但是我认为当用户已经登录时,获得更多权限的方法是再次调用
FB.login()
,并在参数参数中指定所需的权限。

尝试在FB.init中使用oauth:true


在发布FB.login之前,您应该通过代码检查您是否还没有所需的权限。

您的流程不正确。首先检查
FB.api(“/me/permissions”)
回调中的权限(因为facebook api调用是异步的),然后如果尚未授予该特定权限,则调用
FB.login()

给你-

if (response.status === 'connected'){
    FB.api('/me/permissions', function(response){
        var hasPermission = false;
        var response = new Array();
        response = response.data;
        response.map(function (data) {
            if (data.permission == "ads_management" && "status" == "granted") {
               hasPermission = true;
            } 
        });
        if(!hasPermission)
            // call FB.login() here
    });
}