更新的答案
有没有办法在使用 Facebook SDK 的 Android 应用程序中检查官方 Facebook 应用程序是否未登录到 Android 应用程序正在使用的同一帐户,如果是这种情况,请退出 Android 应用程序。 ..
如果我理解这一点,你问我们是否可以:
- 从您的应用程序中,检查是否安装了官方 android 应用程序
- 如果已安装,请检查它是否登录到与您的应用相同的帐户
- 如果官方应用未登录您的帐户,请退出您的应用
简短的回答:不,但你可以,通过编写自己的 Facebook 课程
- 检查官方 FB 应用程序是否未安装或处于注销状态或登录到另一个帐户。
- 如果是这种情况,请强制您的应用显示登录对话框。
长答案:
Single Single On(SSO) 在 Facebook Android SDK 的 Facebook 类中处理。Facebook 类 API 没有可让您访问或修改 SSO 流程的方法。
在 Facebook 类中,有四个重载的公共授权方法。其中三个称第四个:
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 应用程序是否可以管理 Auth 过程:
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;
}
该方法为 com.facebook.katana 包中的类 ProxyAuth 创建显式意图,该包是官方 Facebook 应用程序包。然后该方法以意图作为参数调用 validateActivityIntent。如果服务意图解析成功并且 FB 签名匹配,则返回 true。
我们无权访问 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 标志,则用户将“自动”登录。