fb.login在后台运行对话框?

时间:2012-05-21 14:02:31

标签: javascript jquery facebook facebook-javascript-sdk

为了检查用户是否提供了我的应用所需的所有权限,我这样做:

/*Solo hacemos la peticion si el checkbox estaba desmarcado. Nota: esta funcion asume que solo hay un checkbox en el dom*/
if($('input:checkbox').prop('checked')){
    FB.login(function(response){
             console.log(response.status);
            if (response.status == 'connected') {
            hi   /* Entonces listo */
            }else{
                 /* Entonces cancelamos el checkbox */
                 $('input:checkbox').removeAttr('checked');
            }
    }, { scope: 'publish_stream' });
}

这样:

  • 如果用户已全部完成:弹出窗口打开的时间不到一秒

  • 如果用户还没有:显示权限对话框

问题是:如何防止在第一种情况下打开对话框(可能在后台运行)?

2 个答案:

答案 0 :(得分:2)

使用FB.login时无法停止弹出窗口。

使用服务器端身份验证或使用FB.getLoginStatus来阻止第一种情况下的弹出窗口。

  

FB.getLoginStatus允许您确定用户是否已登录   Facebook并已对您的应用进行身份验证

参考Facebook docs

上述参考链接的摘录

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    // the user is logged in and has authenticated your
    // app, and response.authResponse supplies
    // the user's ID, a valid access token, a signed
    // request, and the time the access token 
    // and signed request each expire
    var uid = response.authResponse.userID;
    var accessToken = response.authResponse.accessToken;
  } else if (response.status === 'not_authorized') {
    // the user is logged in to Facebook, 
    // but has not authenticated your app
  } else {
    // the user isn't logged in to Facebook.
  }
 });

这就是你需要的。

编辑(在OP发表评论后)

可能是facebook正在缓存旧结果。 从我上面提到的相同链接,

  

往返于Facebook的服务器

     

要提高应用程序的性能,而不是每次检查都要求   用户的状态将导致对Facebook服务器的请求。   在可能的情况下,缓存响应。在当前的第一次   调用FB.getLoginStatus的浏览器会话,或JD SDK   初始化为status:true,响应对象将被缓存   SDK。对FB.getLoginStatus的后续调用将从此返回数据   缓存响应。

     

这可能会导致用户登录(或退出)时出现问题   Facebook自上次完整会话查询以来,或者如果用户有   在帐户设置中删除了您的应用程序。

     

要解决此问题,请使用第二个调用FB.getLoginStatus   参数设置为true以强制往返于Facebook   刷新响应对象的缓存。

FB.getLoginStatus(function(response) {
      // this will be called when the roundtrip to Facebook has completed
    }, true);
  

如果在每次加载页面时调用FB.getLoginStatus,请注意不要   为每个设置此参数,因为它会显着增加   对Facebook服务器的请求数量,从而减少了   执行您的应用程序。

答案 1 :(得分:0)

默认情况下,facebook sdk login()功能会弹出一个弹出窗口,您可以在Documentation中阅读。

所以这不是你想去的方式。 有2个类似的问题,你可能会发现它的信息非常有用。

尝试ThisThis