2011-09-23 11 views
8

मुझे एक कठिन समस्या है। कठिन माध्यम मैंने नेट और स्टैक ओवरफ्लो के साथ-साथ पूरे एफबीजेएस एसडीके दस्तावेज के माध्यम से खोज की और जवाब नहीं मिला।FB.getLoginStatus कॉलबैक फ़ंक्शन को सक्रिय नहीं करता

मैं एक पेज टैब एप्लिकेशन बना रहा हूं जहां मैं प्रशंसकों को आरएसवीपी कार्यक्रमों को देना चाहता हूं। तो मुझे यह जांचना है कि क्या उपयोगकर्ता लॉग इन है और यदि मुझे लॉगिन करना नहीं है। यह बहुत आसान लगता है, लेकिन FB.getLoginStatus कॉलबैक फ़ंक्शन को सक्रिय नहीं करता है। इस कोड अंश है:

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

और उसके बाद मैं बस - एक बटन पर उपयोगकर्ता क्लिक करने के बाद निश्चित रूप से - फोन FB.getLoginStatus, लेकिन यह यह कुछ भी नहीं है लगता है।

मैंने पहले ही सैंडबॉक्स मोड, FB.init सफलता, एप्लिकेशन सेटिंग्स में यूआरएल और विकासशील वातावरण की जांच की है। मैं एफबी.ईई को कॉल कर सकता हूं, हालांकि विधि के साथ एफबी.ईई: 'ओथ' मुझे एक त्रुटि संदेश मिलता है जिसमें कहा गया है कि "रीडायरेक्ट_री" पैरामीटर का उपयोग "अगले" पैरामीटर के साथ नहीं किया जा सकता है, जिसे बहिष्कृत किया गया है। " जो बहुत अजीब है क्योंकि मैंने "अगला" पैरामीटर नहीं इस्तेमाल किया था। लेकिन जब मैं अपरिभाषित के बगल में सेट करता हूं, तो यह ठीक काम करता है, मुझे खिड़की मिलती है, लेकिन यह कहती है "एप्लिकेशन कॉन्फ़िगरेशन द्वारा दिए गए यूआरएल की अनुमति नहीं है।" उस से अपेक्षा करें, मैं लॉगिन कर सकता हूं, फिर मुझे 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 है, जो एक स्टैंडअलोन वेबसाइट के रूप में कॉन्फ़िगर किया गया है पर एक नया अनुप्रयोग बनाया । वहां ये कोड पूरी तरह से काम करते हैं, मैं लॉजिस्टस्टैटस प्राप्त कर सकता हूं, मैं लॉगिन कर सकता हूं, आदि। क्या एफबी के संदर्भ में काम करने में कोई फर्क पड़ता है, और एक स्टैंडअलोन वेबसाइट में, एफबी जावास्क्रिप्ट एसडीके का उपयोग कर? FB JS SDK Documentation से

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

:

+0

क्या आप कुछ और कोड प्रदान करेंगे? – ifaour

उत्तर

16

FB.getLoginStatus कॉलबैक आग नहीं होती जब आप एक है कि आप के साथ एप्लिकेशन पंजीकृत से भिन्न डोमेन पर वेबसाइट चला रहे हैं। मैं आमतौर पर इस स्थिति में खुद को ढूंढता हूं जब मैं स्थानीय रूप से या स्टेजिंग सर्वर पर विकास कर रहा हूं।

उदाहरण के लिए, यदि आप के साथ example.com साइट पंजीकृत करने और अपने मचान सर्वर example.mystagingserver.com, कॉलबैक अभ्यस्त आग है।इस मामले में, आपको फेसबुक में दूसरा एप्लिकेशन बनाना होगा और नए ऐप के लिए एप्लिकेशन आईडी और सीक्रेट का उपयोग करना होगा।

+0

I पता नहीं क्या हुआ, लेकिन कल मैंने ऐप सेटिंग्स को दोबारा जांच लिया, और ऐप डोमेन एक हटाने योग्य लेबल के रूप में दिखाया गया, न कि एक स्ट्रिंग के रूप में जिसे मैंने देखा था, और - वॉयला - सब कुछ एक चिकनी, चल रही मशीन के रूप में काम कर रहा है। –

0

यदि उपयोगकर्ता के प्रवेश की जांच करने के लिए निम्न कोड का उपयोग कर सकते हैं।

आप jQuery तैयार में पूरे कोड लपेट कर सकते हैं:

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

इसके अलावा, आप this question StackOverflow जाँच करना चाहते हो सकता है।

+1

यह बुरा हिस्सा है, क्योंकि कॉलबैक फ़ंक्शन getLoginStatus पर नहीं चलेंगे ... जैसा कि मैंने मूल प्रश्न में कहा था। और मैंने आपके द्वारा वर्णित प्रश्न को पढ़ा, लेकिन इससे मदद नहीं मिली। –

+0

मुझे एक ही समस्या है, FB.getLoginStatus को केवल तभी बुलाया जाएगा जब उपयोगकर्ता लॉग इन हो। – thesmart

+0

मैं लॉग इन हूं और कोई भाग्य नहीं: O –

2

मैं इस कोड का सफलतापूर्वक उपयोग कर रहा हूं। मुझे पूरा यकीन नहीं है कि मतभेद कहाँ हैं .. लेकिन मैं 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

कोशिश की, लेकिन मदद नहीं की ... धन्यवाद, वैसे भी –

3

मुझे बस एक ही समस्या थी, हालांकि यह केवल कुछ उपयोगकर्ताओं के साथ हुआ था।

मुझे अंततः पता चला कि यदि आपका ऐप सैंडबॉक्स मोड है, तो कोई भी डेवलपर उपयोगकर्ता अभी भी आपके ऐप को पेजेटैब के रूप में नहीं देख सकता है। लेकिन GetLoginStatus को कॉल करना चुपचाप विफल हो जाएगा (यहां तक ​​कि लॉगिंग चालू भी)।

उस समय को समझने के लिए थोड़ी देर लग गई, मुझे उम्मीद है कि यह किसी और को कुछ समय बचा सकता है।

0

मेरे लिए व्यापक परीक्षण के बाद प्रवेश करने के लिए उपयोगकर्ता नहीं दिखाया जाएगा जब तक कि आप का उपयोग संवाद पुष्टि कर सकते हैं एक वैध Application ID

ये

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

में पाया जा सकता बस सुनिश्चित करें कि आप के साथ API कॉल करना सही आईडी

संबंधित मुद्दे