我正在使用 parse.com 的 Android API 并添加了 Facebook/Twitter 登录支持。这工作正常。
棘手的部分似乎是注销。
如果我使用 Twitter 登录我的应用:
ParseTwitterUtils.logIn(UserLoginActivity.this, twitterLoginCallback);
或使用 Facebook:
ParseFacebookUtils.logInWithReadPermissionsInBackground(UserLoginActivity.this, null, facebookLoginCallback);
网络对话框提示我输入我的 Twitter 凭据,然后允许或拒绝访问我的应用程序。一旦允许,我就可以成功登录,并且可以访问我的屏幕名称。一切顺利!
当我尝试从我的 ParseUser 中注销 时,我确实被注销了。但是,如果我再次单击 Facebook 或 Twitter 登录按钮,我将作为我以前的帐户进行预验证,我无法切换帐户。
我试过:
- 正在检查 Chrome 和浏览器,但均未登录 Twitter。
- 退出 native Twitter/Facebook 应用
我的登录逻辑一开始很简单:
ParseUser.logOut();
对于推特我试过了
- 卸载我的应用程序 - 这确实解决了问题,但不是理想的解决方案。
- 不按照此处的建议在我的
Application
中调用Parse.enableLocalDatastore(this);
:https://stackoverflow.com/a/26338326/494356 - 按照此处的建议取消链接 Twitter 帐户:https://stackoverflow.com/a/34052718/494356 .这也有不好的副作用,每次都创建一个新的 ParseUser(但仍然是同一个 Twitter 帐户)
- 我已尝试按照此处的建议将权限从“只读”更改为“读写”https://stackoverflow.com/a/27714159/494356 . (无论如何这对我来说并不重要)
- 我尝试将 AuthToken 设置为
null
ParseTwitterUtils.getTwitter().setAuthToken(null);
ParseTwitterUtils.getTwitter().setAuthTokenSecret(null);
Facebook 我试过
- 卸载我的应用程序 - 这不能解决问题。
使用 Facebook SDK 注销功能:
AccessToken.setCurrentAccessToken(null);
Profile.setCurrentProfile(null);
LoginManager.getInstance().logOut();
曾经有一个
Session.closeAndClearTokenInformation()
的建议here .但是 Facebook 有 Deprecated the Session class它不再包含在 SDK 中。- 按照建议取消链接 Facebook 帐户 here .这再次导致重复的 ParseUsers,我仍然能够使用保存的凭据登录。
如果有任何答案或建议,我将不胜感激。即使您只能回答 Twitter 或 Facebook 而不是两者,我仍然很想听听。
最佳答案
在我们的应用程序中,登录/注销过程适用于 Facebook、电子邮件甚至是自己构建的谷歌登录。我可以告诉您我第一眼看到的差异,也许其中之一对您有用。
首先,我们不直接在代码中使用 ParseUser
实例,而是有一个扩展 ParseUser
的 MyUser
类。
其次,所有登录逻辑都封装在后台服务中,而不是直接在我们的 Activity 中调用。这可能无法解决问题。但在后台服务中,我们还缓存了 MyUser
实例,如果我们需要它,则检索它并使用该实例注销用户 (MyUser.logOut()
)。并在注销后设置为null
。
最后但同样重要的是:您运行的是最新版本的 Parse SDK 吗?
关于android - 使用 Parse Twitter/Facebook 身份验证注销或切换帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34101598/