Facebook javascript api 呼叫已停止发送

Facebook javascript api calls stopped being sent

我们有一个使用 Facebook 登录的网站。 4 天前,未进行任何更改,登录按钮停止运行。

对 FB.init 的调用在以下情况下运行良好:

function initFB() {
    FB.init({
        appId: ufm_config.fbAppId,
        cookie: true,
        oauth: true,
        xfbml: true,
        logging: true,
        autoLogAppEvents: true,
        frictionlessRequests: true,
        status: true,
        version: 'v2.12'
    });

    FB.getLoginStatus(fbConnectionChanged);
    FB.Event.subscribe("auth.login", fbConnectionChanged);
    FB.Event.subscribe('auth.authResponseChange', fbConnectionChanged);
    FB.Event.subscribe("auth.logout", fbConnectionChanged);
}

对 getLoginStatus(fbConnectionChanged) 的调用也有效,正在触发回调。

页面加载后,用户可以点击 Facebook 登录按钮,当他点击时我们调用 FB.Login(fbConnectionChanged)。我可以看到调用已添加到 Facebook SDK 代码中的 "calls" 数组,但未触发回调。

当我再次点击按钮时,我看到 "calls" 数组仍然包含之前的登录请求,而现在第二个请求只是被添加到那里。所有的电话都卡在那里:

f.__buffer.calls.push([a, Array.prototype.slice.call(参数)])

即使我将 FB.Login(fbConnectionChanged) 调用更改为 FB.getLoginStatus(fbConnectionChanged),我也会得到相同的行为,所以它不仅仅是登录调用本身。

我们也没有在 Facebook 应用程序中进行任何更改,并且该站点在 "Valid OAuth Redirect URIs".

中进行了配置

我还能尝试做些什么来解决它?

更新:

当我从控制台调用 FB.login() 时,它工作正常。无法理解为什么它在按钮点击功能上不起作用。

我们在 3-4 天前遇到了同样的问题。电话将转到 __buffer。这里的问题是 FB 改变了他们的 sdk 上的一些东西,它在内部加载了更新版本的 SDK。当你执行init时,初始版本被加载并同步返回。

https://connect.facebook.net/en_US/sdk.js 负载 https://connect.facebook.net/en_US/sdk.js?hash=39f310e26cdcb1dd91634dc45d62ffe9&ua=modern_es6 异步。因此,我们解决这个问题的方法是在加载页面本身时初始化 FB。然后使用 FB 或 window.FB 在点击时进行其他调用(异步)。这就是为什么它也可以在控制台上运行的原因,因为届时将加载较新的 sdk 并可供使用。

伪示例代码:

constructor() {
    FB.init({...})
}

onButtonClicked() {
    FB.login({...})
}

此外,注意到 __buffer 现在已在加载的较新 sdk 中被 __globalCallbacks 取代。

希望这对您有所帮助