如何在Android Studio的Java项目中实现Google Firebase登录?
Firebase Google登录按钮完整实现方案
以下是可直接运行的Java代码实现,替换你现有空的点击事件逻辑:
package com.example.firebasegoogleauth4; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.google.android.gms.auth.api.identity.BeginSignInRequest; import com.google.android.gms.auth.api.identity.Identity; import com.google.android.gms.auth.api.identity.SignInClient; import com.google.android.gms.auth.api.identity.SignInCredential; import com.google.android.gms.common.api.ApiException; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.GoogleAuthProvider; public class MainActivity extends AppCompatActivity { private Button btn; private SignInClient oneTapClient; private BeginSignInRequest signInRequest; private static final int REQ_ONE_TAP = 2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = findViewById(R.id.button1); // 初始化OneTap登录客户端 oneTapClient = Identity.getSignInClient(this); signInRequest = BeginSignInRequest.builder() .setGoogleIdTokenRequestOptions(BeginSignInRequest.GoogleIdTokenRequestOptions.builder() .setSupported(true) // 替换为你Firebase项目的Web客户端ID,在Firebase控制台>认证>登录方法>Google中获取 .setServerClientId(getString(R.string.default_web_client_id)) .setFilterByAuthorizedAccounts(false) .build()) .setAutoSelectEnabled(true) .build(); btn.setOnClickListener(v -> startGoogleSignIn()); } private void startGoogleSignIn() { oneTapClient.beginSignIn(signInRequest) .addOnSuccessListener(result -> { try { startIntentSenderForResult( result.getPendingIntent().getIntentSender(), REQ_ONE_TAP, null, 0, 0, 0); } catch (Exception e) { Toast.makeText(this, "登录启动失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); } }) .addOnFailureListener(e -> Toast.makeText(this, "无可用登录账号: " + e.getMessage(), Toast.LENGTH_SHORT).show()); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQ_ONE_TAP) { try { SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(data); String idToken = credential.getGoogleIdToken(); if (idToken != null) { AuthCredential firebaseCredential = GoogleAuthProvider.getCredential(idToken, null); FirebaseAuth.getInstance().signInWithCredential(firebaseCredential) .addOnCompleteListener(task -> { if (task.isSuccessful()) { Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show(); // 登录成功后可跳转主页或处理用户数据 } else { Toast.makeText(this, "登录失败: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show(); } }); } } catch (ApiException e) { Toast.makeText(this, "认证失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } } }
关键配置检查
- 打开
strings.xml,添加default_web_client_id字段,值从Firebase控制台认证>登录方法>Google的Web SDK配置中复制client_id。 - 确保Firebase控制台已启用Google登录功能。
- 确认模块级
build.gradle中已添加依赖:implementation 'com.google.firebase:firebase-auth:22.3.1' implementation 'com.google.android.gms:play-services-auth:20.7.0' - 测试前清理项目并重新构建,避免缓存问题。
内容的提问来源于stack exchange,提问作者Shiva Ramlal
相关产品推荐
相关产品推荐

