0

フラッシュアプ​​リの js-api に接続する as3-fb-api を使用しています。ログイン、友達のプロフィール写真の取得、ログアウト、繰り返し。

しかし、ユーザーが facebook.com を指す 2 番目のブラウザー タブを開き、それを使用して facebook からログアウトし、アプリに戻り、Facebook.logout() を呼び出すログアウト ボタンを押すと、問題が発生します。

私のアプリは次をリッスンします:

Facebook.addJSEventListener( 'auth.statusChange'       , om__statusChange       ) ;
Facebook.addJSEventListener( 'auth.authResponseChange' , om__authResponseChange ) ;
Facebook.addJSEventListener( 'auth.login'              , om__login_noticed      ) ;
Facebook.addJSEventListener( 'auth.logout'             , om__logout_noticed     ) ;

理想的には、Facebook.logout() が js を呼び出して、fb サーバーを ajax し、ユーザーが既に外出していることを発見し、アプリが処理するメッセージを返すことを期待します。

私の firebug デバッガーでは、facebookjsbridge: logout 関数が呼び出されていることがわかりますが、そのコールバック FBAS.handleUserLogoutは呼び出されておらず、イベントリスナーも呼び出されていません。

では、アプリをサーバーと同期する適切な方法は何ですか?

4

1 に答える 1

0

さまざまな手法を数日間試した後、これが私が思いついたものですが、それはハックです

問題は、ユーザーが as3-fb-api:Facebook.login(...) を介して Facebook アプリにログインし、別のブラウザー タブに移動し、そこで facebook.com を開き、そこでログアウトしてから、に戻る場合です。私のアプリとそれをいじると、私のアプリはFacebookと同期しなくなります。

したがって、この問題を解決するために、この失敗を探すためのすべての Facebook.api 呼び出しがあります。

{ error , [object Object] , object
    { code , 190 , number
      message , Error validating access token: The session is invalid because the user logged out. , string
      type , OAuthException , string
      error_subcode , 467 , number          
     }
}
// I may discover later that there are other types of failures 
//    that I will need to catch as well.

このエラーで呼び出しが返された場合、アプリはそれ自体をリロードします (リロードを処理するために js への External-Interface 呼び出しを使用します)。

さらに、このシステムを使用するために、LOGOUT ボタンにルーチンを追加しました。元々、ユーザーが LOGOUT ボタンを押したとき、単純に Facebook.logout(...) を呼び出していましたが、ユーザーが既にログアウトしている場合は失敗します... Facebook.logout(...) はコールバックさえ呼び出しませんエラー メッセージが表示されるため、アプリには非同期の問題を検出する手段がありません。

ユーザーが LOGOUT ボタンを押すと、アプリは最初に Facebook.api("/me/" , ... ) を呼び出します。なぜ?ユーザーが別のブラウザー タブからログアウトした場合でも、その API 呼び出しはエラー メッセージ (または成功メッセージ) を返すためです。そして、この API 呼び出しが失敗メッセージ/オブジェクトを返した場合は、アプリをリロード フェーズに切り替えます。それ以外の場合は、通常どおり Facebook.logout(...) を使用して続行します。

于 2012-05-28T14:33:47.370 に答える