【发布时间】:2013-02-02 06:52:46
【问题描述】:
现在我正在使用 android Facebook 集成。但是注销无法处理这个问题。如果没有从手机中的浏览器注销,我无法从我的应用程序注销。为什么会发生这种情况?我们如何避免这种情况
【问题讨论】:
标签: android facebook logout facebook-android-sdk
现在我正在使用 android Facebook 集成。但是注销无法处理这个问题。如果没有从手机中的浏览器注销,我无法从我的应用程序注销。为什么会发生这种情况?我们如何避免这种情况
【问题讨论】:
标签: android facebook logout facebook-android-sdk
这里有两件独立的事情:
1) 您的用户是否已向 Facebook 验证您的应用(具有权限)以及
2) 您的用户是否登录 Facebook。
您的用户首次使用您的应用时需要进行身份验证,并持续到用户明确取消身份验证(例如,通过 Facebook 网络帐户设置 -> 应用 -> 应用设置)。
您的用户每次启动您的应用时都可能需要登录。但是,如果您使用默认的 SDK authorize(),它会尝试执行单点登录 (SSO),如果 Facebook 应用已登录,您的应用会自动登录并使用现有的访问令牌。
如果您使用 SSO,那么当您进行注销时,这没有任何效果,因为真正的注销将不得不注销 Facebook 应用程序 - 用户可能不喜欢!
您可以通过对表单进行授权来解决此问题
authorize(this, PERMISSIONS, FORCE_DIALOG_AUTH, new LoginDialogListener());
避免 SSO 并强制对话登录。当然,这会强制您的用户在每次启动应用程序时登录 - 除非您将登录详细信息/访问令牌保存在 覆盖(这是 SDK 所做的 - 检查源代码)。
已编辑:
m_facebook.authorize(FacebookActivity.this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener()); class LoginDialogListener implements DialogListener { public void onComplete(Bundle p_values) { saveCredentials(m_facebook); if (m_messageToPost != null) { postToWall(m_messageToPost); } } public void onFacebookError(FacebookError p_error) { finish(); } public void onError(DialogError p_error) { finish(); } public void onCancel() { finish(); } }
【讨论】:
FORCE_DIALOG_AUTH的保存位置