所以我试图在我的Android应用程序上实现Facebook登录。
到目前为止,我认为它正在发挥作用。它登录。 所以,当我回到我的登录页面(仍然需要更新)时,我说“用facebook登录”的按钮,转到“退出”。
我按下它,但不是退出,而是再次登录。
这是我处理Facebook登录的代码
var facebookLoginBtn = findViewById<Button>(R.id.loginFacebookBtn)
facebookLoginBtn.setOnClickListener(View.OnClickListener {
callBackManager = CallbackManager.Factory.create()
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"))
LoginManager.getInstance().registerCallback(callBackManager,
object : FacebookCallback<LoginResult> {
override fun onSuccess(loginResult: LoginResult) {
Log.d("LoginActivity", "Facebook Token: " + loginResult.accessToken.token)
startActivity(Intent(applicationContext, MainActivity::class.java))
}
override fun onCancel() {
Log.d("LoginActivity", "Facebook onCancel")
}
override fun onError(error: FacebookException?) {
Log.d("LoginActivity", "Facebook onError")
}
})
})
}
我尝试注销
var btnLogout = findViewById<Button>(R.id.loginFacebookBtn)
btnLogout.setOnClickListener(View.OnClickListener {
if (AccessToken.getCurrentAccessToken() == null) {
return@OnClickListener
} else if (AccessToken.getCurrentAccessToken() != null) {
GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/",
null, HttpMethod.DELETE, GraphRequest.Callback {
LoginManager.getInstance().logOut()
}
).executeAsync()
}
})
答案 0 :(得分:0)
您正在为1个按钮分配2个事件处理程序。这可能导致两个事件处理程序都被执行。我还没有找到这方面的来源,但至少它符合您的退出和重新登录的描述。
由于您只使用一个按钮来登录和注销,为什么不使用相同的事件处理程序并使用一些if
语句来确定要走哪条路?
facebookLoginBtn.setOnClickListener(View.OnClickListener {
// Check if logged in
if (loggedIn) {
facebookLogOut();
}
else {
facebookLogIn();
}
});
loggedIn
可能会被(AccessToken.getCurrentAccessToken() == null)
替换,因为您在退出之前已经使用此功能进行检查。