10

facebook.logout(コンテキスト)の動作についてちょっと混乱します。Facebook SDKのAndroidでのログアウトの仕組み

ログアウトしても、auth_tokenを必要とする情報にアクセスすることができます。では、それはどのように可能ですか? https://stackoverflow.com/a/6597688/487940

この回答を読んだら、これは私の質問です。ユーザーが[my]アプリケーションへのアクセスを許可した場合、ログインしていると常に認証されます[公式の] Facebookアプリケーション? [私の]アプリケーションでfacebook.logout(コンテキスト)を呼び出そうとしても、彼はログインして、私のアプリケーションはFacebook APIを呼び出すことができますか?

申し訳ありませんが、私はこの動作を理解できません。

更新: Toridの応答を読んだ後、facebook.logout()関数について混乱します。ユーザーがログアウトしない場合、この関数の目的は何ですか?なぜなら、私はもうこの目的を呼ぶ目的を見ていないからです。ユーザーをログアウトしません。

答えて

8

ここでは2つの独立したことが行われています:1)あなたのユーザがFacebookへのあなたのアプリケーション(権限付き)を認証しているかどうか、2)あなたのユーザがFacebookにログインしているかどうか。

ユーザーは初めてアプリを使用し、明示的に認証が解除されるまで認証が必要です(Facebookのアカウント設定 - >アプリ - >アプリの設定など)。

ユーザーがアプリを起動するたびにログインする必要があります。しかし、既定のSDK authorize()を使用すると、シングルサインオン(SSO)が試行されます。Facebookアプリケーションがログインしている場合、アプリケーションは自動的にログインし、既存のアクセストークンを使用します。

ログアウトするときにSSOを使用している場合、実際のログアウトはFacebookアプリをログアウトする必要があるため、ユーザーは気に入らない可能性があります。

あなたは、SSOを回避し、ダイアログ・ログインを強制的にフォーム

authorize(this, PERMISSIONS, FORCE_DIALOG_AUTH, new LoginDialogListener()); 

のAUTHORIZEを行うことによって、この動作を回避することができます。もちろん、それは カバーの下にログインの詳細/アクセストークンを保存しないかぎり、SDKを実行するたびにユーザーにログインさせなければなりません。

+0

したがって、facebook.isSessionValid()は、ユーザーが実際にログオンしているかどうかを確認する正しい方法ですか?ユーザーがログインしていても、facebook.isSessionValid()はtrueを返すため、 – harsimranb

+2

私は、SSOを使用しているときにユーザーのログイン状態を知る方法はSDKにはないと思います。 logout()はあなたのapp/webviewのクッキーをクリアし、accessTokenをnullにします。 isSessionValid()はaccessTokenが有効かどうかをチェックします。だから、あなたのアプリがlogout()を行った後、isSessionValidはfalseを返します。しかしFacebokoアプリはまだログインしているので、FacebookのアプリでチェックするSSO(デフォルト)でログインすると、有効なaccessTokenが残っていますが、これはユーザーを経由せずにアプリに返されますログイン。 – Torid

+1

facebook.isSessionValidは、logout()を呼び出した後でもtrueを返します。 – harsimranb