接入Google登录与Firebase Auth的应用如何添加已有账号登录入口
实现步骤
1. 调整启动页布局
在activity_main.xml文件中添加现有用户登录的入口控件,示例如下:
<TextView android:id="@+id/tv_existing_user_login" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="已是现有用户?登录" android:textColor="@color/design_default_color_primary" android:textSize="14sp" android:layout_marginTop="20dp" app:layout_constraintTop_toBottomOf="@id/signin" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"/>
你可以根据自己的布局调整位置和样式。
2. 修改MainActivity逻辑
首先新增两个全局变量,标记当前是否是现有用户触发的登录操作:
private TextView tvExistingUserLogin; private boolean isExistingUserLogin = false;
修改onCreate方法,初始化控件并绑定点击事件:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); signin = findViewById(R.id.signin); tvExistingUserLogin = findViewById(R.id.tv_existing_user_login); requestGoogleSignIn(); signin.setOnClickListener(view -> { isExistingUserLogin = false; signIn(); }); tvExistingUserLogin.setOnClickListener(view -> { isExistingUserLogin = true; signIn(); }); mAuth = FirebaseAuth.getInstance(); }
修改firebaseAuthWithGoogle方法的跳转逻辑,区分新老用户的跳转路径:
private void firebaseAuthWithGoogle(String idToken) { AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, task -> { if (task.isSuccessful()) { boolean isNewUser = task.getResult().getAdditionalUserInfo().isNewUser(); if (isExistingUserLogin) { // 现有用户直接跳主页 startActivity(new Intent(MainActivity.this, MainActivity2.class)); } else { if (isNewUser) { // 新注册用户跳资料补全页 startActivity(new Intent(MainActivity.this, UserProfileChangeRequest.class)); } else { // 已注册用户误点注册按钮,直接跳主页 startActivity(new Intent(MainActivity.this, MainActivity2.class)); } } finish(); } else { Toast.makeText(MainActivity.this,"登录失败", Toast.LENGTH_SHORT).show(); } }); }
原有onStart里的自动登录逻辑可以保留,不需要修改。
3. 可选优化
如果想要用户点击现有用户登录时,强制弹出账号选择列表,避免直接复用上次登录的账号,可以在调用signIn()之前先执行退出登录操作:
tvExistingUserLogin.setOnClickListener(view -> { isExistingUserLogin = true; mGoogleSignInClient.signOut(); signIn(); });
内容的提问来源于stack exchange,提问作者Rafael Campos
相关产品推荐
相关产品推荐

