java - 适用于 Android 的 GoogleSignInClient.signOut() 不会注销用户
问题描述
1)在我的HomeActivity屏幕上会有一个用户退出按钮。这个按钮导致LoginActivity 的signOut ()方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//adding an onclicklistener to signOut button
findViewById(R.id.sign_out_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoginActivity loginActivity = new LoginActivity();
loginActivity.signOut();
}
});
}
2) 在我的LoginActivity中, signOut ()方法将执行Google 提供的本教程中的内容
public void signOut() {
mGoogleSignInClient.signOut()
.addOnCompleteListener(this, new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Toast.makeText(getApplicationContext(), "Disconnecting...", Toast.LENGTH_LONG);
Intent i = new Intent(getApplicationContext(), LoginActivity.class);
startActivity(i);
}
});
}
我希望上面的代码能够工作,但发生的情况是,当退出后执行返回 LoginActivity 的意图时,下面的 onStart() 方法进入if (account != null)并返回应该的用户被登出
@Override
public void onStart() {
super.onStart();
// Check for existing Google Sign In account
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
if (account != null) {
findViewById(R.id.sign_in_button).setVisibility(View.GONE);
Toast.makeText(this, "Logged as" + account.getDisplayName(), Toast.LENGTH_LONG).show();
} else {
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
}
}
解决方案
clearDefaultAccountAndReconnect() api 将清除以前登录的帐户详细信息。尝试在侦听器的注销 onComplete() 方法中使用以下代码段。
if (mGoogleApiClient.hasConnectedApi(Auth.GOOGLE_SIGN_IN_API)) {
mGoogleApiClient.clearDefaultAccountAndReconnect();
mGoogleApiClient.stopAutoManage(context);
mGoogleApiClient.disconnect();
}
推荐阅读
- c# - 如何使用 ASP.NET Core Razor 页面预选下拉列表中的项目
- android - Android Dagger 将父片段转换为子片段
- python - Jupyter 扩展不再与 VScode 中的 python 一起使用
- google-drive-android-api - getLimit() 返回 null
- python - 创建正则表达式以匹配以下场景
- linux - 为什么命名信号量可以在任何知道其名称的进程中被线程使用?
- go - 如何将接口传递给有很多参数的方法
- c++ - c ++将向量中出现n次的所有元素作为向量返回
- python - 调用 pygame.init() Python 后无法创建或写入文件
- scala - 在连接两个具有间隔的 Spark 数据帧时应用 UDF