📅  最后修改于: 2023-12-03 14:41:12.194000             🧑  作者: Mango
Firebase 是由 Google 开发的后端服务平台,其提供了一系列的工具和服务,包括云存储、身份验证、实时数据库、云函数等。其中身份验证服务允许您实现多种身份验证方式,其中包括 Google 登录身份验证。本文将向您介绍如何在 Firebase 中实现 Google 登录身份验证。
在开始之前,您需要完成以下几个任务:
在您的项目中,将 Firebase 配置文件添加到您的应用程序中。您可以在 Firebase 控制台中获取该文件。
使用 Firebase SDK 集成 Google 登录 API。这将使您的应用程序能够获取 Google 身份验证令牌。
// Swift 示例
import Firebase
import GoogleSignIn
// 初始化 Firebase
FirebaseApp.configure()
// 初始化 Google 登录
GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
// Java 示例
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;
// 初始化 Firebase
FirebaseAuth mAuth = FirebaseAuth.getInstance();
// 初始化 Google 登录
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
GoogleSignInClient mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
在您的应用程序中,提供 Google 登录选项以验证用户身份。当用户选择 Google 登录选项时,将启动 Google 登录流程,该流程将使用 Firebase SDK 获取并验证 Google 身份验证令牌。
// Swift 示例
@IBAction func signInWithGoogle(_ sender: Any) {
GIDSignIn.sharedInstance()?.presentingViewController = self
GIDSignIn.sharedInstance()?.signIn()
}
// Google 登录回调
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
if let error = error {
print("Google 登录出错: \(error.localizedDescription)")
return
}
guard let authentication = user.authentication else { return }
let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)
// 将令牌传递给 Firebase 身份验证以进行身份验证
Auth.auth().signIn(with: credential) { (authResult, error) in
if let error = error {
print("Firebase 登录出错: \(error.localizedDescription)")
return
}
// 用户已登录,执行下一步操作
}
}
// Java 示例
private static int RC_SIGN_IN = 9001;
@RequiresApi(api = Build.VERSION_CODES.DONUT)
@OnClick(R.id.btn_google_signin)
public void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}
// Google 登录回调
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 结果由 Google 登录 SDK 处理
if (requestCode == RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try {
// Google 登录成功,将身份验证令牌传递给 Firebase 认证进行认证
GoogleSignInAccount account = task.getResult(ApiException.class);
firebaseAuthWithGoogle(account);
} catch (ApiException e) {
// Google 登录失败,处理错误
Log.w(TAG, "Google 登录出错", e);
}
}
}
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
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 {
// Firebase 登录失败,处理错误
Log.w(TAG, "Firebase 登录失败", task.getException());
}
}
});
}
当用户成功登录时,您可以使用 Firebase 身份验证 SDK 获取当前用户的身份验证状态。此时,您可以向用户显示特定于应用程序的内容,例如授权功能或访问权限。
// Swift 示例
if let user = Auth.auth().currentUser {
// 用户已登录,执行下一步操作
} else {
// 将用户指向登录视图控制器
}
// Java 示例
FirebaseUser user = mAuth.getCurrentUser();
if (user != null) {
// 用户已登录,执行下一步操作
} else {
// 将用户指向登录页面
}
现在您已经学会了使用 Firebase 中的 Google 登录身份验证!在您的应用程序中集成 Google 登录时,请确保您理解身份验证流程并按照最佳实践进行操作。如果您还没有使用 Firebase,那么现在就去尝试吧!