2011-08-12 14 views
1

リアルタイムでFacebook上でユーザーのログインステータスを取得します。その質問にはHow to know if a user log out of Facebook, FB.Event.Subscribe not workこの質問は私の他の質問に関連している

、私は、ユーザーがFacebookでのログアウト時にイベントを呼び出しを取り戻すことを試みました。しかし、それはまだ適切な答えがないので、私は別の方法を試す必要があります。私はこのように、ジャバスクリプトによってユーザーのログイン状態を取得するためにポーリングを試してみてください。

 function checkLogin() 
     { 
      alert("in"); 
      FB.getLoginStatus(function(response) { 
       if (response.status == "connected") { 
       // logged in and connected user, someone you know 
       alert("ok - 5 seconds has passed"); 
       } else { 
       // no user session available, someone you dont know 
       alert("not ok"); 
       } 
      }); 
      t=checkLogin("timedCount()",5000); 
     } 

これに問題があることである:関数が唯一の正しい結果にそれが呼び出される最初の時間を返します。その後、結果はキャッシュされているように見えますが、ユーザーはサイレントにのブラウザで別のタブでログアウトしていますが、応答として「接続済み」を継続的に受信しました。

この時点でFacebookはユーザーにログインを要求するダイアログを表示するので、これはうまくありません。しかし、ユーザーがキャンセルすると、彼はまだ自分のアプリケーションで作業することができます(アプリケーションサーバーとのセッションがまだ期限切れになっていません)。 document

、FB devがいることを言う:あなたはFB.getLoginStatusを起動すると

は、HTTP要求は、ユーザの現在の状態を確認するために www.facebook.comに行うことができます。しかし、 へ FB.getLoginStatusが既に 、このブラウザセッション中に呼び出され、セッションはクッキーの中に永続化された、HTTPリクエストfacebook.comは

を必要とされなくてもよいのであれば、私はこの効果を考えますキャッシュされた人によって引き起こされます。なぜFacebookがそれをそうするのだろうか。

誰もがこの問題の回避策を知っていますか?任意の助け

おかげで、

ホアンロング

答えて

1

それは私の同僚の1まで、問題を解決し、最終的には、十分な私に長い時間がかかりました。

getLoginStatusを呼び出す前ににもう一度cookie:falseと電話する必要があります。これにより、Cookieが削除され、新しい情報が取得されます。

FB.init({ 
     appId:'${appId}', 
      cookie: false, 
     status: true, 
     xfbml: true 
    }); 

FB.getLoginStatus(function (response) { 
     if (response.session) { 
       alert("here"); 
     } 
}); 
+0

この問題を修正するには:FBはいくつかの変更を取り除き、litte以上のコードを更新する必要があります。詳細:https://developers.facebook.com/blog/post/525/ –