FB.Event.subscribe nunca recibe llamadas

Este es mi código de conexión de Facebook:

<script>
jQuery(document).ready(function($){
    $(".fb-login-button").live('click', function() {
      console.log('click');
      fbEnsureInit(function() {
        console.log('EnsureInit');
        FB.login(function(response) {
          console.log('FB.login');
          // redirect will be done
        }, {scope: 'email'});
      });
  });
});

window.fbAsyncInit = function() {
  FB.init({
    appId      : '105224616211361', // App ID
    /*channelUrl : '///channel.html', // Channel File // We don't do not to get caching problems with the laguage!*/
    status     : true, // check login status
    cookie     : true, // enable cookies to allow the server to access the session
    oauth      : true, // enable OAuth 2.0
    xfbml      : true  // parse XFBML
  });
  // Additional initialization code here
  fbApiInitialized = true;

  // whenever the user logs in, we refresh the page
  FB.Event.subscribe('auth.login', function(response) {
    try {
      if (response.status == 'connected') {
      console.log('connected');
      $.ajax({
        type: "POST",
        url: "/?eID=login&modus=facebook&fb-login=1",
        data: $(this).serialize(),
        success: function(msg) {
          console.log("LOGIN");
          window.location.reload();
        }
      })             
    } else {
      console.log('not connected');
      window.location.reload();
    }
  } catch(err) {
    window.location.reload();
   }
});
};

/**
 * Make sure that the FB is initialized!
 */
function fbEnsureInit(callback) {
  if (!window.fbApiInitialized) {
    setTimeout(function() { fbEnsureInit(callback); }, 50);
  } else {
    if (callback) { callback(); }
  }
}

/**
 * Load the JS SDK directly from Facebook
 */
(function() {
    var e = document.createElement('script'); e.async = true;
      e.src = document.location.protocol +
      '//connect.facebook.net/de_DE/all.js';
      document.getElementById('fb-root').appendChild(e);
    }());

</script>

El SDK se carga. Puedo ver el botón FB y cuando hago clic en él, el código funciona hasta que

console.log('FB.login');

El FB-Popup aparece y no pasa nada... Este debería ser el punto donde:

  FB.Event.subscribe('auth.login', function(response) {

debería recibir una llamada... pero no lo hace... ¿alguien puede ayudarme con este problema?

Gracias.

EDIT:

Acabo de darme cuenta de que esto solo sucede cuando ya estoy conectado a Facebook. Si no he iniciado sesión, la ventana emergente de inicio de sesión aparece dos veces (!) y puedo iniciar sesión en Facebook y se llama a la función FB.Event.Subscribe.

Entonces, ¿cómo puedo ver si el usuario ha iniciado sesión en Facebook y está conectado a mi aplicación?

¿Y por qué el Popup se llama dos veces?

preguntado el 12 de junio de 12 a las 10:06

Elimine la función de carga directa de JS SDK en la parte inferior del script. -

Si hago esto, la imagen del botón FB no se carga. Y solo tengo un texto en el que no se puede hacer clic: "Conectar con Facebook". -

Mi error. Pensé que estabas cargando el SDK dos veces. -

Cambié la pregunta... Descubrí que esto solo sucede si ya estoy conectado a Facebook... -

1 Respuestas

Tienes que usar FB.getLoginStatus si desea verificar si el usuario está conectado a su aplicación.

La ventana emergente de inicio de sesión se activa dos veces porque el botón FB también tiene una función de inicio de sesión. Elimina tu llamada ajax a $(".fb-login-button").live y modifique su botón de inicio de sesión de esta manera:

<div class="fb-login-button" scope="email" data-show-faces="true" data-width="200" data-max-rows="1"></div>

Respondido el 12 de junio de 12 a las 11:06

¿Qué quiere decir: "Elimine su llamada ajax a $(".fb-login-button").live"? Y además de esto, mi botón de Facebook es exactamente así excepto por: "Iniciar sesión con Facebook" entre los div. - MrTouch

En esa función estás llamando FB.login que también se inicia con el botón de inicio de sesión. Esa es la razón por la que obtienes dos ventanas emergentes. - yan berk

Veo tu punto, pero no sé cómo hacerlo. ¿Cómo puedo eliminar FB.Login pero mantener mis funciones allí? - MrTouch

No utilice el botón de inicio de sesión de Facebook. Haz uno tú mismo. - yan berk

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.