3

私は Web サイトに取り組んでおり、Facebook を使用してログインするオプションをユーザーに提供したいと考えていました。
ログインには成功していますが、イベントが機能していません。

ログインするたびに、「ログイン」機能が呼び出されませんでした.....手動で確認するために、このログイン機能を他のボタンに割り当ててみましたが、アラートは機能しましたが、応答がありませんでした。

ここに私のコード:

<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
   FB.init({appId: MY_APP_ID, status: true, cookie: true, xfbml: true});

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

 function login(){
    FB.api('/me', function(response) {
   alert('You have successfully logged in, '+response.name+"!");
  }); 
 }

 (function() {
   var e = document.createElement('script');
   e.type = 'text/javascript';
   e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    e.async = true;
   document.getElementById('fb-root').appendChild(e);
 }());     </script>

<fb:login-button autologoutlink='true'   
  perms='email,user_birthday,status_update,publish_stream'></fb:login-button>


これは Facebook アプリケーションの設定です。
ここに画像の説明を入力

4

2 に答える 2

1

<head>代わりにall.jsスクリプトをロードしてみました#fb-rootか?以下を使用してください。

  (function(d){
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/es_LA/all.js";
     d.getElementsByTagName('head')[0].appendChild(js);
   }(document));

それ以外の:

 (function() {
   var e = document.createElement('script');
   e.type = 'text/javascript';
   e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    e.async = true;
   document.getElementById('fb-root').appendChild(e);
 }());

[編集:更新されたサンプル]

SDKは、本文またはページの上部に近い要素に対して相対的に配置されることを期待する要素をfb-rootに挿入します。

SDKソースを置き換える可能性もあります。
リソース:FacebookJavascriptSDK

-
他のイベントに登録して、そのイベントが機能するかどうかを確認できますか

FB.Event.subscribe('auth.statusChange', function(response) {
  // do something with response
});

Facebookのドキュメントから(代わりにこれを購読してみてください)

auth.authResponseChange
このイベントは、ログイン、ログアウト、セッションの更新など、すべてがセッションに影響を与えるため、認証関連の変更に対して発生します。ユーザーがアプリを使用している限り、セッションは時間の経過とともに更新されます。

auth.statusChange
通常、auth.authResponseChangeイベントを使用する必要があります。ただし、まれに、次の3つの状態を区別する必要があります
。1。接続
済み2. Facebookにログインしているが、アプリケーションに接続していない3.Facebookにまったくログインしていない

于 2013-02-19T11:11:39.913 に答える
0

シナリオ 1 (新規ユーザー)

Facebook ログイン ボタンのテキスト: 「ログイン」
ユーザー状態: ユーザーが接続されていません

ユーザーがログインをクリックすると、ログインフローが完了します。

ボタンのテキストが「ログアウト」に変わり、'auth.login'トリガーされるのはこのときだけです。

FB.Event.subscribe('auth.login', function (response) {     
        // do something with response                   
        if (response.status === 'connected') {
            // user connected                        
            FB.api('/me', function (response) {
                alert(response.name + " " + response.id);
            });
        }
});

シナリオ 2 (既存のユーザー)

Facebook にログインしていて、既にアプリを承認しているユーザーがアプリにアクセスすると、ユーザーは自動的に接続され、ログイン ボタンのテキストは「ログアウト」になります。
この場合、次のコードを に追加しますfbAsyncInit function

            FB.getLoginStatus(function (response) {
                if (response.status === 'connected') {
                    // connected
                    alert(response.name + " " + response.id);
                }
            });

FB.getLoginStatusページが更新されるたびに呼び出されますが、JavaScript 関数に埋め込むことで、アプリ内でいつでも呼び出すことができます。

于 2013-02-19T13:31:57.960 に答える