Firebase Google登录功能异常求助:选账号后弹出错误提示
Firebase Google登录失败问题排查
我正在尝试用Firebase实现Google登录功能,但一直无法正常运行,已经花了好几个小时排查。现在的问题是:点击“Sign in with Google”按钮并选择账号后,会弹出错误提示Toast。以下是我的实现代码:
public class LoginActivity extends AppCompatActivity { private RelativeLayout signInWithGoogleBtn; private FirebaseAuth mAuth; private GoogleSignInOptions gso; private GoogleSignInClient mGoogleSignInClient; private static final int RC_SIGN_IN = 123; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); signInWithGoogleBtn = findViewById(R.id.signInWithGoogleBtn); mAuth = FirebaseAuth.getInstance(); GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build(); mGoogleSignInClient = GoogleSignIn.getClient(this, gso); signInWithGoogleBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { googleSignIn(); } }); } private void googleSignIn() { Intent intent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(intent, RC_SIGN_IN); } @Override public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); try { GoogleSignInAccount account = task.getResult(ApiException.class); firebaseAuthWithGoogle(account.getIdToken()); } catch (ApiException e) { Toast.makeText(LoginActivity.this, "Error", Toast.LENGTH_SHORT).show(); } } } private void firebaseAuthWithGoogle(String idToken) { AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Toast.makeText(LoginActivity.this, "Google Sign In Success", Toast.LENGTH_SHORT).show(); FirebaseUser user = mAuth.getCurrentUser(); startActivity(new Intent(LoginActivity.this, MainActivity.class)); LoginActivity.this.finish(); } else { Toast.makeText(LoginActivity.this, "Failed to Sign In with Google! Please check your credentials.", Toast.LENGTH_LONG).show(); } } }); } }
排查步骤
先获取具体错误信息:修改
ApiException的catch块,打印错误码和日志,不要只显示模糊的"Error":catch (ApiException e) { Log.e("GoogleSignInError", "登录失败", e); Toast.makeText(LoginActivity.this, "错误码: " + e.getStatusCode(), Toast.LENGTH_SHORT).show(); } 常见错误码对应问题: - 10:客户端ID配置错误 - 7:签名证书SHA1未在Firebase控制台配置 - 12500:网络无法访问Google服务 - 16:用户取消登录核对
default_web_client_id有效性:- 确保
google-services.json已正确放置在app模块根目录 - 打开
google-services.json,检查oauth_client节点下的web类型client_id,是否和代码中getString(R.string.default_web_client_id)的值一致
- 确保
检查SHA1指纹配置:
- 运行
./gradlew signingReport获取debug/release版本的SHA1值 - 在Firebase控制台的「项目设置」中,添加对应版本的SHA1指纹
- 运行
确认依赖完整性:
app/build.gradle中需包含:implementation 'com.google.firebase:firebase-auth:22.3.0' implementation 'com.google.android.gms:play-services-auth:20.7.0'根build.gradle中需添加Google服务插件:
classpath 'com.google.gms:google-services:4.4.0'app模块末尾需添加:
apply plugin: 'com.google.gms.google-services'启用Firebase Google登录方式:
在Firebase控制台的「Authentication」→「登录方法」中,确保Google登录已启用,且配置了正确的支持邮箱域名(若有设置)检查网络环境:确保测试设备能正常访问Google服务,避免网络限制影响登录流程
内容的提问来源于stack exchange,提问作者Mohammad Abu Saada
相关产品推荐
相关产品推荐

