java - Firebase 实时数据库 注销 Google 帐户
问题描述
我已经使用 Google Accounts 实现了登录方法,我的问题是注销功能不符合我的要求。我没有收到任何错误,只是代码无法正常工作。
有人能告诉我这段代码有什么问题吗?
选项片段:
Preference logoutPreference = findPreference(getString(R.string.pref_key_logout));
logoutPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
FirebaseAuth.getInstance().signOut();
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("com.example.budgetapp.ACTION_LOGOUT");
getActivity().sendBroadcast(broadcastIntent);
getActivity().startActivity(new Intent(getActivity(), SignInActivity.class));
getActivity().finish();
return true;
}
});
主要活动:
@Override
protected void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.example.budgetapp.ACTION_LOGOUT");
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};
registerReceiver(receiver, intentFilter);
}
为什么代码不起作用?我正在使用 Firebase 实时数据库
每当我单击注销时,应用程序都会将我重定向到登录活动(这很好),但是当我尝试登录时,它会自动登录到以前的 Google 帐户。
解决方案
当您使用以下代码行时:
FirebaseAuth.getInstance().signOut();
这意味着您仅从Firebase 退出。
每当我单击注销时,应用程序都会将我重定向到登录活动(这很好),但是当我尝试登录时,它会自动登录到以前的 Google 帐户。
据我了解,您正在使用 Google Provider 进行身份验证。退出 Firebase 并不意味着您会自动退出 Google。要从 Google 注销,您必须明确添加对GoogleSignInClient#signOut()方法的调用:
googleSignInClient.signOut();
不要忘记注销操作是异步的,这意味着您必须等到操作完成。由于此方法返回一个类型的对象Task<Void>
,您可以使用addOnCompleteListener(OnCompleteListener listener)方法来了解您何时完全退出。
推荐阅读
- c# - 使用干净的静态变量第二次加载相同的程序集
- linux-device-driver - request_irq 失败,因为没有 irq 描述符
- java - gradle.properties 是否可以访问环境变量
- excel - 录制的宏以删除空行但不能始终如一地工作
- android - 如何在具有重力的 Android Sceneform 级别中定向 GLTF
- python-3.x - 循环遍历字符串中的每个字符,然后用首字母缩写词替换所述字符,而不使用 replace() 或 find() 函数
- php - 为什么只向 mysql 数据库插入一列不会在 codeigniter 中显示错误?
- php - 当有人仅使用 PHP 和 HTML 在表单中输入内容时,如何创建新的表格行?
- java - 如何在 webclient 中返回 Flux.just 状态
- python - Python相当于r中的子集函数