更新された回答
Facebook SDK を使用する Android アプリで、公式の Facebook アプリが Android アプリが使用しているのと同じアカウントにサインインしていないかどうかを確認し、その場合は Android アプリからサインアウトする方法はありますか。 ..
私がこれを正しく理解している場合、あなたは私たちができるかどうか尋ねています:
- アプリから、公式の Android アプリがインストールされているかどうかを確認します
- インストールされている場合は、アプリと同じアカウントにサインインしているかどうかを確認してください
- 公式アプリがアカウントにサインインしていない場合は、アプリをサインアウトします
簡単な答え: いいえ。ただし、独自の Facebook クラスを作成することで可能です。
- 公式の FB アプリがインストールされていないか、ログアウト状態にあるか、または別のアカウントにログインしているかどうかを確認します。
- いずれかの場合は、アプリに強制的にログイン ダイアログを表示させます。
長い答え:
Single Single On(SSO) は、Facebook Android SDK の Facebook クラスで処理されます。Facebook クラス API には、SSO プロセスへのアクセスや変更を可能にするメソッドがありません。
Facebook クラスには、4 つのオーバーロードされた public 承認メソッドがあります。そのうちの 3 つは 4 番目を呼び出します。
public void authorize(Activity activity, String[] permissions,
int activityCode, final DialogListener listener)
ここで、SSO プロセスが開始されます。次のように SSO をチェックします。
// Prefer single sign-on, where available.
if (activityCode >= 0) {
singleSignOnStarted = startSingleSignOn(activity, mAppId,
permissions, activityCode);
}
// Otherwise fall back to traditional dialog.
if (!singleSignOnStarted) {
startDialogAuth(activity, permissions);
}
プライベートな startSingleSignOn メソッドは、公式の Facebook アプリが認証プロセスを管理できるかどうかを確認します。
private boolean startSingleSignOn(Activity activity, String applicationId,
String[] permissions, int activityCode) {
boolean didSucceed = true;
Intent intent = new Intent();
intent.setClassName("com.facebook.katana",
"com.facebook.katana.ProxyAuth");
intent.putExtra("client_id", applicationId);
if (permissions.length > 0) {
intent.putExtra("scope", TextUtils.join(",", permissions));
}
// Verify that the application whose package name is
// com.facebook.katana.ProxyAuth
// has the expected FB app signature.
if (!validateActivityIntent(activity, intent)) {
return false;
}
mAuthActivity = activity;
mAuthPermissions = permissions;
mAuthActivityCode = activityCode;
try {
activity.startActivityForResult(intent, activityCode);
} catch (ActivityNotFoundException e) {
didSucceed = false;
}
return didSucceed;
}
このメソッドは、正式な Facebook アプリのパッケージであるパッケージ com.facebook.katana 内のクラス ProxyAuth の明示的なインテントを作成します。次にメソッドは、インテントをパラメータとして validateActivityIntent を呼び出します。サービス インテントの解決が正常に行われ、FB 署名が一致する場合は true を返します。
ProxyAuth クラス ソースへのアクセス権はありませんが、質問とコメントで説明した観察されたアプリの動作に基づいて、ProxyAuth は、ユーザーが公式アプリで同じアカウントにログインしている場合にのみ認証プロセスを完了するようです。あなたのアプリで。これは、1) 公式の FB アプリがインストールされていない、2) 公式の FB アプリがログイン状態にない、3) 別のアカウントにログインしている、をアプリから区別する方法がないことを意味します。
だからあなたはこれを行うことができます:
- FB アプリがインストールされていないか、ログインしていないか、別のアカウントにログインしているかどうかを確認します。
- いずれかの場合は、アプリをログアウトしてください。
しかし、あなたはできません
- 公式 FB がインストールされていて、ログアウト状態であることを確認します。
- 公式の FB アプリがインストールされていて、別のアカウントにログインしていることを確認してください。
上記の方法でサインアウトをトリガーする必要がある場合は、独自のカスタム Facebook クラスを記述して新しいロジックを追加する必要があります。Facebook Android SDK の Facebook クラスは抽象クラスを拡張せず、Object のみを暗黙的に拡張するため、Facebook コードを CustomFacebook クラスに複製し、それを変更して強制的にログアウトするコードを追加する必要があります。
参考のため:
古い答え
これがあなたの質問に答えるかどうかはわかりませんが、Facebook Android SDK でユーザーを強制的にログアウトさせるには、認証/ログイン中に authorize() を呼び出すときに FORCE_DIALOG_AUTH フラグを使用します。
mFacebook.authorize(this, PERMS, mFacebook.FORCE_DIALOG_AUTH, new LoginDialogListener());
ここで、mFacebook は SDK の Facebook クラスのインスタンスであり、LoginDialogListener は DialogListener を実装します。
ユーザーがログアウトすると、次にユーザーがログインするか、アプリを起動するときに、ログイン ダイアログが表示されるようになります。
FORCE_DIALOG_AUTH フラグを設定しない場合、ユーザーは「自動的に」ログインします。