- 如果用户安装了Facebook应用程序并使用SDK登录第三方应用程序,则Facebook应用程序也会登录
- 如果用户使用SDK退出第三方应用程序,则Facebook应用程序仍然登录(可能是最好的)
- 如果用户退出Facebook应用程序,则使用SDK的第三方应用程序不受影响
在使用Facebook SDK的Android应用程序中,有没有一种方法可以检查并查看官方Facebook应用程序是否未登录与Android应用程序使用相同的帐户。如果是这种情况,则退出Android应用程序...
如果我理解正确,您是在询问我们是否可以:
简短的答案:不能。但您可以通过编写自己的Facebook类来实现。
长答案:
单点登录(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);
}
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;
}
mFacebook.authorize(this, PERMS, mFacebook.FORCE_DIALOG_AUTH, new LoginDialogListener());
其中mFacebook是SDK的Facebook类的实例,LoginDialogListener实现了DialogListener接口。
如果用户注销登录,则下一次用户想要登录或启动您的应用程序时将出现登录对话框。
如果您不设置FORCE_DIALOG_AUTH标志,则用户将被“自动”登录。
几点评论,希望这能有所帮助。
鉴于Facebook应用是主应用程序,您(或其他人)的应用程序的登录/注销操作不会产生任何影响。 您的应用程序通过SSO流程获得自己的访问令牌,并且这不会与主应用程序产生任何联系。
简单来说,完成SSO后,您将获得为您的appid分配的访问令牌,有效期约为2小时(如果您没有请求offline_access权限)。
-- 如何检查您的令牌的有效性? 最简单的方法是使用HTTP GET加载我的个人资料
https://graph.facebook.com/me?access_token=<access_token>
如果您的令牌无效,响应将明确告诉您
-- 如何使您的令牌失效(即注销)? 您可以对该端点进行HTTP GET调用,参见示例
https://api.facebook.com/restserver.php?method=auth.expireSession&format=json&access_token=<access_token>
1)检查官方FB应用是否已安装非常简单。如果已安装,则facebook.authorize(blah,blah,blah)将在您的应用程序内带您进入登录屏幕,否则它将切换到Webview进行授权。
2)您可以尝试从共享首选项中获取access_token并检查是否存在,然后在注销时尝试清除它。