📜  Android Firebase身份验证(1)

📅  最后修改于: 2023-12-03 15:29:20.558000             🧑  作者: Mango

Android Firebase身份验证

Firebase是Google提供的一个开发平台,主要提供了多项云服务支持,例如实时数据库存储、云存储、消息推送、身份验证等等。本篇文章主要介绍Firebase身份验证,通过Firebase身份验证,我们可以让用户使用他们的Google账号或是社交媒体账号进行登录,使得登录操作变得更加便捷和易用。在此之前,我们需要先注册一个Firebase账号,并创建一个项目,然后将我们的应用关联到Firebase平台中的这个项目。

配置 Firebase SDK

在项目的 build.gradle 文件中,添加 Firebase SDK 依赖。

dependencies {
  // Firebase Authentication SDK
  implementation 'com.google.firebase:firebase-auth:16.0.5'
}
实现匿名登录
FirebaseAuth mAuth;
mAuth = FirebaseAuth.getInstance();
mAuth.signInAnonymously()
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                // 登录成功,可以在这里处理一些逻辑
            } else {
                // 登录失败
            }
        }
    });

在匿名登录的情况下,用户不需要输入账号和密码,直接点击登录即可进入应用。但这种情况下,用户是无法进行数据同步的,仅仅可以使用应用的普通功能而已。在此仅作为一个例子演示。

实现电子邮件/密码登录
FirebaseAuth mAuth;
mAuth = FirebaseAuth.getInstance();
mAuth.signInWithEmailAndPassword(email, password)
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                // 登录成功,可以在这里处理一些逻辑
            } else {
                // 登录失败
            }
        }
    });

在此种情况下,用户需要输入注册的电子邮件地址和密码进行登录,但是这种方式存在一个缺点:需要用户事先注册在我们应用中,这样带来了一些不方便和不透明的地方。常常我们会使用第三方认证账号(例如Google账号)实现用户登录操作。

实现Google登录
FirebaseAuth mAuth;
GoogleSignInClient mGoogleSignInClient;
private static final int RC_SIGN_IN = 9001;

mAuth = FirebaseAuth.getInstance();

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestEmail()
        .build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

@OnClick(R.id.google_sign_in_button)
public void onGoogleSignIn() {
    Intent signInIntent = mGoogleSignInClient.getSignInIntent();
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            // Google Sign In was successful, authenticate with Firebase
            GoogleSignInAccount account = task.getResult(ApiException.class);
            firebaseAuthWithGoogle(account);
        } catch (ApiException e) {
            // Google Sign In failed, update UI appropriately
        }
    }
}

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // 登录成功,可以在这里处理一些逻辑
                } else {
                    // 登录失败
                }
            }
        });
}

Google 登录是 Firebase 最常见的身份验证方式之一。通过 Google 登录,我们可以快速、高效的完成用户登陆操作。在用户点击 Google 登录按钮后,将会跳转至 Google 登录界面,等待用户输入其 Google 账号密码,完成身份认证后,将会返回 Token,再将 Token 传入 Firebase 进行身份认证。

当然,我们也可以自定义 Google 登录按钮,本文采用了 Android 中常用的 ButterKnife 框架来实现,以减少样板代码。

至此,我们已经完成了百度云文本审核上手的全部流程,同时还学会了如何快速使用 Firebase 来实现一些常见的用户身份认证操作。

参考

https://firebase.google.com/docs/auth/android/start/