FB.getLoginStatus 不会触发回调函数
Posted
技术标签:
【中文标题】FB.getLoginStatus 不会触发回调函数【英文标题】:FB.getLoginStatus does not fires callback function 【发布时间】:2011-11-23 06:57:18 【问题描述】:我有一个难题。困难意味着我搜索了网络和 *** 以及整个 FBJS SDK 文档,但没有找到答案。
我正在构建一个页面选项卡应用程序,我想让粉丝在其中参与 rsvp 活动。所以我必须检查用户是否登录,如果没有,我必须登录。这听起来很简单,但 。这是代码摘录:
FB.init(
appId: window.appID,
status: true,
xfbml: true,
cookie: true,
oauth: true,
channelUrl: 'http://example.com/fb/channel.html'
);
然后我只是——当然是在用户点击一个按钮之后——调用 FB.getLoginStatus,但它似乎没有做任何事情。
我已经检查了沙盒模式、FB.init 成功、应用程序设置和开发环境中的 URL。我可以调用 FB.ui,尽管使用方法:'oauth' 的 FB.ui 我收到一条错误消息,指出““redirect_uri”参数不能与“next”参数一起使用,已弃用。”。这很奇怪,因为我没有使用“下一个”参数。但是当我在未定义旁边设置时,它工作正常,我得到窗口,但它显示“应用程序配置不允许给定 URL。”。期待,我可以登录,然后我得到了 access_token。但是在新窗口中,getLoginStatus 仍然没有做任何事情。
所以欢迎任何建议。
谢谢, 塔马斯
更新:
function onBodyLoad() //on body onload
FB.init(
appId: window.appID,
status: true,
xfbml: true,
cookie: true,
oauth: true,
channelUrl: 'http://example.com/fb/channel.html'
);
...
function getName() // on button onclick
FB.getLoginStatus(function(response)
if (response.authResponse)
window.loggedIn = true;
debugString('Logged in');
else
window.loggedIn=false;
debugString('Not logged in');
, true);
if (window.loggedIn === undefined)
debugString('getLoginStatus did not exec'); // I always get this message
更新 2:我在不同的 URL 上创建了一个新的应用程序,它被配置为一个独立的网站。这些代码可以完美运行,我可以获取LoginStatus,我可以登录等。在 FB 的上下文中和在独立网站中使用 FB javascript SDK 有什么区别吗?
【问题讨论】:
您能提供更多代码吗? 【参考方案1】:FB.getLoginStatus
不会在您在与您注册应用程序的域不同的域上运行网站时触发回调。当我在本地或登台服务器上开发时,我通常会发现自己处于这种情况。
例如,如果您使用 example.com 注册了站点,并且您的登台服务器是 example.mystagingserver.com,则不会触发回调。在这种情况下,您需要在 Facebook 中创建第二个应用程序,并为新应用程序使用 Application ID 和 Secret。
【讨论】:
我不知道发生了什么,但昨天我再次检查了应用程序设置,应用程序域显示为可删除标签,而不是我以前看到的字符串,并且 - 瞧 - 一切都是作为一台平稳运行的机器。【参考方案2】:我也遇到了同样的问题,虽然它只发生在一些用户身上。
我终于发现,如果您的应用是沙盒模式,非开发人员用户仍然可以将您的应用视为页面标签。但是调用 getLoginStatus 会静默失败(即使打开了日志记录)。
花了一段时间才弄清楚,我希望这可以节省其他人一些时间。
【讨论】:
【参考方案3】:我正在使用此代码,成功。我不太确定差异在哪里......但我正在使用 ASYNC FB Loader。
window.fbAsyncInit = function()
FB.init( appId: 'XXXXXX', //change the appId to your appId
status: true,
cookie: true,
xfbml: true,
oauth: true);
function authEvent(response)
if (response.authResponse)
//user is already logged in and connected
FB.api('/me', function(info)
login(response, info);
);
else
//user is not connected to your app or logged out
button.onclick = function()
FB.login(function(response)
if (response.authResponse)
FB.api('/me', function(info)
login(response, info);
);
else
//user cancelled login or did not grant authorization
, scope:'email,rsvp_event,status_update,publish_stream,user_about_me');
// run once with current status and whenever the status changes
FB.getLoginStatus(updateButton);
FB.Event.subscribe('auth.statusChange', updateButton);
;
(function()
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol
+ '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
());
function login(response, info)
if (response.authResponse)
accessToken = response.authResponse.accessToken;
userid = info.id;
userInfo.innerHTML = '<img src="https://graph.facebook.com/' + info.id + '/picture">' + info.name+"<br /> Your Access Token: " + accessToken;
【讨论】:
【参考方案4】:您可以使用以下代码检查用户是否登录:
FB.getLoginStatus(function(response)
if (response.authResponse)
// logged in and connected user, someone you know
else
// no user session available, someone you dont know
);
来自FB JS SDK Documentation。
您可以将整个代码包装在jQuery ready 中:
$('document').ready(function()
... above code
)
您还可以查看this question ***。
【讨论】:
这是不好的部分,因为回调函数不会在 getLoginStatus 上运行......正如我在原始问题中所说的那样。我读了你提到的问题,但没有帮助。 我也有同样的问题,FB.getLoginStatus 只有在用户登录时才会被调用。 我已登录,但没有这样的运气:O【参考方案5】:我遇到了同样的问题。我正在处理我们网站的 facebook 登录过程。在开发过程中,“FB.getLoginStatus”没有返回响应。我在 facebook 上的应用程序设置中修复了它:
-在 facebook 中转到“管理应用程序”
-转到您应用的“facebook登录”设置
-将您的开发网址(例如“https://localhost”)添加到“有效的 OAuth 重定向 URI”
(完成开发后,不要忘记从 OAuth 重定向 URI 中删除“https://localhost”。)
【讨论】:
【参考方案6】:导致这种情况的常见原因是浏览器阻止了 cookie,这将导致事件不触发。此外,如果您或您的用户有广告拦截器,请确保它不会阻止第三方 cookie。
警告示例:
【讨论】:
【参考方案7】:对我来说,经过大量测试后可以确认用户不会显示登录对话框,除非您使用有效的Application ID
这些可以在
中找到https://developers.facebook.com/apps/Application__Id/settings/
只需确保使用正确的 ID 调用 api。
【讨论】:
以上是关于FB.getLoginStatus 不会触发回调函数的主要内容,如果未能解决你的问题,请参考以下文章
Facebook JS Sdk - FB.getLoginStatus = 未定义
Facebook JavaScript SDK:FB.getLoginStatus和FB.Login在Chrome上不起作用