0

私は自分のSDKをセットアップしてボタンをcheckLoginStateのファンクションを起動しますが、FB.loginは呼び出されません。私は最新バージョン(v2.9)を使用しています。私は2.8も使ってみました。FB.login()が呼び出されていない

私はそれが非同期であることとは何かを推測していますが、私は次に何をすべきか分かりません。

コード:

<script> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : 'xxxxxxxxxxx', 
     status : true, 
     cookie : true, 
     xfbml  : true, 
     version : 'v2.8' 
    }); 
    }; 

    (function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
</script> 

<fb:login-button onlogin="checkLoginState();" show-faces="false" scope="email,public_profile" width="400"></fb:login-button> 

<script type='text/javascript'> 

    function checkLoginState() { 
     FB.getLoginStatus(function(response) { 
     statusChangeCallback(response); 
     }); 
    } 

    function statusChangeCallback(response) { 
     if (response.status !== 'connected'){ 
      Facebook_login(); 
     } 
     else{ 
      console.log(response); 
     } 
     } 

    function Facebook_login() { 

     FB.login(function (response) { <--- debugger comes here 
      if (response.status === 'connected') { <----- but not here :-(
       //do stuff 
      } 

     }); 
    } 

+0

FB.loginの 'response'とは​​何ですか? '==='ではなく '=='で試してみてください。 –

+0

@JayGouldレスポンスが「不明」 – rory

+1

ログインボタンは独自のログインを実行するので、そのボタンを使用するときにFB.loginを自分で呼び出す必要はありません。そして、非同期メソッドのコールバック関数の中で、それをキャリングする方法は、ブラウザのポップアップブロッカーによってブロックされる可能性が非常に高いでしょう。 – CBroe

答えて

1

ログインボタンが独自にログインを行い、あなたがそのボタンを使用する場合FB.loginを自分で呼び出す必要はありません。

FB.loginは、自分のリンク/ボタンを使用してログインをトリガーする場合に使用します。


そして、あなたはそれを呼び出している方法は、非同期メソッドのコールバック関数の内部で、それが最も可能性の高いブラウザのポップアップブロックによってブロックされます。 FB.loginを使用している場合は、ユーザーとの直接的なやりとり(つまり、リンク/ボタンのクリック)でのみ呼び出し、非同期コールバックには入れないようにしてください。

0
<span><a onclick="fbLogin()" id="fbLink" class="btn faceebook btn-circle muliregular text-capitalize"><i class="fa fa-facebook"></i> Facebook </a></span> 

var global_fb = false; 

    window.fbAsyncInit = function() { 
    // FB JavaScript SDK configuration and setup 
    FB.init({ 
    appId  : 'xxxxxxxx', // FB App ID 
    cookie  : true, // enable cookies to allow the server to access the session 
    xfbml  : true, // parse social plugins on this page 
    version : 'v2.8' // use graph api version 2.8 
    }); 

    // Check whether the user already logged in 
    FB.getLoginStatus(function(response) { 
    if (response.status === 'connected') { 
    //display user data 
    getFbUserData(); 
    } 
    }); 
    }; 

    // Load the JavaScript SDK asynchronously 
    (function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

    // Facebook login with JavaScript SDK 
    function fbLogin() { 
    global_fb = true; 
    FB.login(function (response) { 
    if (response.authResponse) { 
    // Get and display the user profile data 
    getFbUserData(); 
    } else { 

    } 
    }, {scope: 'email'}); 
    } 

    // Fetch the user profile data from facebook 
    function getFbUserData(){ 
    FB.api('/me', {locale: 'en_US', fields: 'id,first_name,last_name,email,link,gender,locale,picture'}, 
    function (response) { 
    $.post('loginwithfacebook',{userData:response},function(data){ 
    if(data.id != ""){ 
     if(global_fb == true){ 
      // do something 
     } 
    } 
    }); 
    }); 
    } 
関連する問題