2011-09-23 16 views
8

Ho un problema difficile. Difficile significa che ho cercato attraverso la rete e StackOverflow così come tutta la documentazione SDK FBJS e non ho trovato risposta.FB.getLoginStatus non attiva la funzione di callback

Sto costruendo un'applicazione di una scheda di pagina in cui vorrei lasciare che i fan di eventi rsvp. Quindi devo controllare se l'utente è loggato e se non è necessario effettuare il login. Sembra abbastanza facile, ma FB.getLoginStatus non attiva la funzione di callback. Questo è il codice estratto:

FB.init({ 
    appId: window.appID, 
    status: true, 
    xfbml: true, 
    cookie: true, 
    oauth: true, 
    channelUrl: 'http://example.com/fb/channel.html' 
}); 

e poi ho semplicemente - naturalmente dopo l'utente fa clic su un pulsante - chiamata FB.getLoginStatus, ma sembra che non fa nulla.

Ho già controllato la modalità sandbox, FB.init successo, URL nelle impostazioni dell'applicazione e ambiente di sviluppo. Posso chiamare FB.ui, anche se FB.ui con metodo: 'oauth' Ricevo un messaggio di errore che dice "Il parametro" redirect_uri "non può essere usato insieme al parametro" next ", che è deprecato.". Il che è molto strano perché non ho usato il parametro "next". Ma quando mi metto vicino a undefined, funziona bene, ottengo la finestra, ma dice "L'URL dato non è consentito dalla configurazione dell'applicazione". Aspettatevi, posso accedere, quindi ho il token di accesso. Ma nella nuova finestra, getLoginStatus continua a non fare nulla.

Quindi qualsiasi consiglio è benvenuto.

Grazie, Tamas

UPDATE:

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 
    } 

}

UPDATE 2: ho creato una nuova applicazione su un URL diverso, che si configura come un sito web standalone . Questi codici funzionano perfettamente, posso ottenere LogogStatus, posso accedere, ecc. C'è qualche differenza nel contesto di FB e in un sito web standalone, utilizzando l'SDK JavaScript FB?

+0

Forniresti altro codice? – ifaour

risposta

16

FB.getLoginStatus non si attiva la richiamata quando si esegue il sito su un dominio diverso da quello che avete registrato l'applicazione con. Di solito mi trovo in questa situazione quando sto sviluppando localmente o su un server di staging.

Per esempio, se ti sei registrato il sito con example.com e il server di trasferimento è example.mystagingserver.com, il fuoco callback solito.In questo caso, è necessario creare una seconda applicazione in Facebook e utilizzare l'ID applicazione e Secret per la nuova app.

+0

I Non so cosa sia successo, ma ieri ho controllato di nuovo le impostazioni dell'app, e il dominio App mostrato come etichetta eliminabile, non come una stringa che vedevo, e - voilá - tutto funziona come una macchina liscia e funzionante. –

0

È possibile utilizzare il seguente codice per verificare se l'utente è connesso:

FB.getLoginStatus(function(response) { 
    if (response.authResponse) { 
     // logged in and connected user, someone you know 
    } else { 
     // no user session available, someone you dont know 
    } 
}); 

Da FB JS SDK Documentation.

si può avvolgere l'intero codice in jQuery pronto:

$('document').ready(function(){ 
    ... above code 
}) 

Inoltre si consiglia di controllare this question StackOverflow.

+1

questa è la parte errata, perché la funzione di callback non verrà eseguita su getLoginStatus ... come ho detto nella domanda originale. E ho letto la domanda che hai menzionato, ma non è stato d'aiuto. –

+0

Ho lo stesso problema, FB.getLoginStatus verrà chiamato solo se l'utente ha effettuato il login. – thesmart

+0

Ho effettuato l'accesso e non ho avuto tale fortuna: O –

2

Sto usando questo codice, con successo. Non sono abbastanza sicuro di dove siano le differenze ... ma sto usando il caricatore FB ASYNC.

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; 
      } 
     } 
+0

Provato, ma non aiutato ... grazie, comunque –

3

Ho appena avuto lo stesso problema, anche se è successo solo ad alcuni utenti.

Alla fine ho scoperto che se la tua app è in modalità sandbox, gli utenti non sviluppatori possono ancora vedere la tua app come pagetab. Ma chiamare getLoginStatus fallirà silenziosamente (anche la registrazione è attivata).

Ci è voluto un po 'per capirlo, spero che questo possa salvare qualcun altro un po' di tempo.

0

per me, dopo numerosi test in grado di confermare la finestra di dialogo per registrare l'utente non mostrerà a meno di utilizzare una valida Application ID

Questi possono essere trovati in

https://developers.facebook.com/apps/{{Application__Id}}/settings/ 

Basta fare in modo di chiamare l'API con l'ID corretto.

Problemi correlati