paint-brush
使用 Firebase (Java) 在 Android 中进行用户身份验证经过@Temmarie
5,948 讀數
5,948 讀數

使用 Firebase (Java) 在 Android 中进行用户身份验证

经过 Grace Tamara Ekunola26m2023/06/26
Read on Terminal Reader

太長; 讀書

Firebase 是一个移动(Android 或 iOS)和 Web 应用程序开发平台。它提供了谷歌提供的一套基于云的工具和服务。在本教程中,我们将使用 Firebase 构建一个简单的 Java Android 应用程序进行身份验证。我们还将介绍如何将 Android 手机用作模拟器。
featured image - 使用 Firebase (Java) 在 Android 中进行用户身份验证
Grace Tamara Ekunola HackerNoon profile picture
0-item
1-item

什么是 Firebase?


Firebase 是一个移动(Android 或 iOS)和 Web 应用程序开发平台,提供一套基于云的工具和服务谷歌。它是一个后端即服务( BaaS ),使开发人员能够快速高效地构建和部署应用程序,并具有用于身份验证、实时数据库、云存储、托管等的内置功能。


在本教程中,我们将使用 Firebase 构建一个简单的 Java Android 应用程序进行身份验证,允许用户创建帐户。登录和注销帐户。我们还将介绍如何将 Android 手机用作模拟器。


先决条件

在开始本教程之前,您应该了解 Android 应用程序开发的基础知识。

此外,您的计算机上必须安装以下软件:


  • 安卓工作室:安卓工作室是用于开发 Android 应用程序的官方 IDE。它具有大量功能,包括代码编辑、布局设计、调试和用于测试的模拟器。
  • Java 开发工具包 (JDK):在本教程中,我们将使用爪哇构建我们的应用程序。 Android Studio 需要 JDK 8 或更高版本。
  • Android SDK(软件开发工具包):Android SDK 是 Google 提供的用于开发 Android 应用程序的工具和库的集合。
  • Android 虚拟设备 (AVD) 管理器:AVD 管理器是 Android Studio 提供的工具,可让您创建和管理用于测试应用程序的虚拟设备。



第 1 步:创建一个新的 Android 应用程序


  • 打开 Android Studio,然后在欢迎屏幕上单击“启动新的 Android Studio 项目”。如果没有看到此选项,您可以转到“文件”>“新建”>“新建项目”来创建一个新项目。
  • 接下来,您将为您的项目选择一个模板。 Android Studio 为不同类型的应用提供了多种模板,例如“空 Activity”、“基本 Activity”、“全屏 Activity”等。选择“空活动”并单击“下一步”。


项目模板选择



  • 在“空活动”对话框中,您可以为应用程序设置其他设置。您将看到为项目配置各种设置的提示,例如项目名称、包名称、位置、最低 SDK 和语言。填写所需信息;在本例中,项目名称为“FirebaseAuthApp”,然后单击“完成”。


  • Android Studio 将使用所选模板创建一个新项目并生成必要的文件和文件夹。这可能需要几分钟的时间,具体取决于您的系统的性能和容量。项目构建完成后,您将在“项目”选项卡中看到项目结构、布局编辑器中的 Activity_main.xml 布局文件以及编辑器中的 mainactivity.java 文件。
  • 单击工具栏上的“Build”,然后选择“Build Project”以生成包含应用程序代码和资源的 APK 文件。注意:如果您之前触发过构建或者对项目进行了需要完整构建的更改,则您可能会看到“重建项目”而不是“构建项目”。



第 2 步:运行并测试应用程序。

为此,您可以连接物理 Android 设备或启动模拟器。


要使用模拟器,请按照下列步骤操作:

  • 单击 Android Studio 工具栏中的“设备管理器”以打开 Android 虚拟设备 (AVD) 管理器。

AVD管理器


  • 创建或选择现有的虚拟设备:如果您已有虚拟设备,请单击播放按钮以启动 AVD 中的模拟器。如果您没有,请单击“创建设备”以创建新的模拟器或虚拟设备。选择您喜欢的硬件配置(尺寸、分辨率、密度等),然后选择下一步。之后,选择系统映像和 Android 版本。让它下载,然后设置模拟器设置。

硬件选型


  • 创建虚拟设备后,单击播放按钮启动模拟器。
  • 模拟器运行后,导航到工具栏并单击“运行”按钮以在模拟器上运行您的项目。它将自动在模拟器上构建并安装应用程序。您应该在模拟器上看到“Hello World”。

模拟器



要连接到物理 Android 设备,请按照以下步骤操作:

在您的 Android 设备(手机或平板电脑)上,打开设置并导航至“关于手机”。单击“软件信息”。

  • 打开它后,向下滚动并查找“内部版本号”。点击它七次(该数字可能因手机而异;我使用的是三星手机),它将打开开发模式。
  • 在此阶段,它可能会要求您输入密码;输入它,就完成了。返回设置主页,您应该会看到开发者选项。
  • 单击“开发人员选项”,然后打开“USB 调试”。
  • 使用 USB 线将设备连接到计算机。您将看到一条弹出消息,要求您允许从计算机进行 USB 调试。
  • 返回 Android Studio 并导航至 AVD 管理器。在工具栏上,您的设备应该会显示;选择它并运行该应用程序。几分钟后,该应用程序应在您的 Android 设备上打开,您将看到“Hello World”主页。

注意:还有其他方法可以将物理设备作为模拟器连接到 Android studio,例如无线调试,但在本教程中,我们将使用 USB 调试。



第 3 步:创建用户界面

在此步骤中,我们将创建用户界面和设计。导航到“app/res”文件夹;这是大多数用户界面更改发生的地方。

  • 添加颜色:打开“app/res/values/colors.xml”文件并为我们的应用程序添加颜色代码。
 <?xml version="1.0" encoding="utf-8"?> <resources> <color name="slateblue"> #6F58C9</color> <color name="black">#FF000000</color> <color name="white"> #FFFFFFFF</color> </resources>


  • 添加字体:右键单击“res”文件夹,然后单击“新建”,向下滚动到“文件夹”,然后从下拉列表中选择“字体文件夹”。或者创建一个新文件夹并将其命名为“font”。下载并复制这个字体进入字体文件夹。
  • 创建可绘制资源:我们将在登录和注册页面上创建并添加登录、对话框、表单输入框、按钮、背景图像和矢量资源。为此,请按照以下步骤操作:
    • 添加背景图像:下载此图像并将其复制到可绘制文件夹中。
  • 添加自定义可绘制资源文件:在“res”文件夹中,导航到“可绘制”文件夹,右键单击它,单击“新建”,然后选择“可绘制资源文件”。将名称保存为“custom_edittext”并更改从选择器到形状的根元素,然后单击“确定”。
  • 打开文件并添加以下代码行:
 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <stroke android:width="2dp" android:color="@color/slateblue"/> <corners android:radius="30dp"/> </shape>

    • 添加矢量图像:
      • 在“res”文件夹中,导航到“drawable”文件夹,右键单击它,单击“新建”,然后选择“矢量资源”。在这里,我们将下载表单的矢量图像。
      • 单击剪贴画并在搜索栏中输入“人物”。选择“人物”艺术,单击“下一步”,然后选择“完成”。
      • 重复这些步骤,但下载“锁定”的矢量图像。
      • 打开每个文件的 XML 代码并将色调更改为酒红色。 'android:tint="@color/slateblue"'。



第 4 步:创建新活动。

  • 导航到“app/java/com.example.firebaseauthapp”文件夹,右键单击它,然后选择“新建”。向下滚动并点击“活动”,然后选择“空活动”。
  • 将活动重命名为“SignUpActivity”,选中“启动器活动”框,然后单击“完成”。

报名活动

  • 重复步骤(不包括将其设为启动器活动),这次是“LoginActivity”。

  • 打开“app/manifests/AndroidManifest.xml”文件并从主活动块中删除意图过滤器,并将“android:exported=”true””更改为“android:exported=”false””。它应该看起来像这样:


 <activity android:name=".LoginActivity" android:exported="false" /> <activity android:name=".SignUpActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity" android:exported="false"> </activity>




第 5:编辑活动

  • 打开“app/res/layout/activity_main.xml”文件。
  • 添加以下代码:
 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/wallbg" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:textColor="@color/slateblue" android:textSize="26sp" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout>


  • 打开“app/res/layout/activity_sign_up.xml”文件。
  • 添加以下代码:
 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" android:background="@drawable/wallbg" tools:context=".SignUpActivity"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="30dp" app:cardCornerRadius="30dp" app:cardElevation="20dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_gravity="center_horizontal" android:padding="24dp" android:background="@drawable/custom_edittext"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Sign Up" android:textSize="36sp" android:textAlignment="center" android:textStyle="bold" android:textColor="@color/slateblue" /> <EditText android:layout_width="match_parent" android:layout_height="50dp" android:id="@+id/signup_email" android:background="@drawable/custom_edittext" android:layout_marginRight="40dp" android:layout_marginTop="40dp" android:padding="8dp" android:hint="Email" android:drawableLeft="@drawable/baseline_person_24" android:drawablePadding="8dp" android:textColor="@color/black" /> <EditText android:layout_width="match_parent" android:layout_height="50dp" android:id="@+id/signup_password" android:background="@drawable/custom_edittext" android:layout_marginRight="40dp" android:layout_marginTop="20dp" android:padding="8dp" android:hint="Password" android:drawableLeft="@drawable/baseline_lock_24" android:drawablePadding="8dp" android:textColor="@color/black" /> <Button android:layout_width="match_parent" android:layout_height="60dp" android:text="Sign Up" android:id="@+id/signup_button" android:textSize="18sp" android:layout_marginTop="30dp" android:backgroundTint="@color/slateblue" app:cornerRadius = "20dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/loginRedirectText" android:text="Already a user. Login" android:layout_gravity="center" android:padding="8dp" android:layout_marginTop="10dp" android:textColor="@color/slateblue" android:textSize="18sp" /> </LinearLayout> </androidx.cardview.widget.CardView> </LinearLayout>



  • 导航至 app/res/layout/activity_login.xml。
  • 添加以下代码:
 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" android:background="@drawable/wallbg" tools:context=".LoginActivity"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="30dp" app:cardCornerRadius="30dp" app:cardElevation="20dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_gravity="center_horizontal" android:padding="24dp" android:background="@drawable/custom_edittext"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Login" android:textSize="36sp" android:textAlignment="center" android:textStyle="bold" android:textColor="@color/slateblue" /> <EditText android:layout_width="match_parent" android:layout_height="50dp" android:id="@+id/login_email" android:background="@drawable/custom_edittext" android:layout_marginRight="40dp" android:layout_marginTop="40dp" android:padding="8dp" android:hint="Email" android:drawableLeft="@drawable/baseline_person_24" android:drawablePadding="8dp" android:textColor="@color/black" /> <EditText android:layout_width="match_parent" android:layout_height="50dp" android:id="@+id/login_password" android:background="@drawable/custom_edittext" android:layout_marginRight="40dp" android:layout_marginTop="20dp" android:padding="8dp" android:hint="Password" android:drawableLeft="@drawable/baseline_lock_24" android:drawablePadding="8dp" android:textColor="@color/black" /> <Button android:layout_width="match_parent" android:layout_height="60dp" android:text="Login" android:id="@+id/login_button" android:textSize="18sp" android:layout_marginTop="30dp" android:backgroundTint="@color/slateblue" app:cornerRadius = "20dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/signUpRedirectText" android:text="Not yet registered? Sign Up" android:layout_gravity="center" android:padding="8dp" android:layout_marginTop="10dp" android:textColor="@color/slateblue" android:textSize="18sp" /> </LinearLayout> </androidx.cardview.widget.CardView> </LinearLayout>



第 6 步:设置 Firebase 身份验证

  • 导航到菜单栏并点击“工具”,然后选择 Firebase。
  • 完成此操作后,您将看到一个侧面弹出栏。滚动浏览并单击“身份验证” ,然后选择“使用自定义身份验证系统进行身份验证”。请记住,这是一个 Java Android 教程,因此请确保您选择的选项不使用 KOTLIN。


  • 单击 按钮连接到 Firebase。它会将您重定向到 Firebase 控制台。如果您尚未创建帐户,请确保创建一个。您可能会登录;如果没有,请登录。
  • 当你创建一个新项目时,它会根据Android Studio中的项目名称建议一个名称。您可以选择保留它或重命名它。我的是“FirebaseAuthApp”。
  • 在下一个提示中,为项目禁用 Google Analytics,然后创建项目。
  • 创建项目后,您将看到一条提示,要求您将 Android Studio 连接到 Firebase。选择“确定”,就完成了。
  • 返回 Firebase 控制台并打开新创建的项目。
  • 单击“构建”,然后选择“身份验证”。单击“开始”按钮。
  • 通过选择“电子邮件/密码”并启用它来添加登录方法。这将使用您首选的方法(在本例中为电子邮件或密码)构建您的自定义身份验证系统。

登录方式


  • 导航回 Android Studio。您应该会看到一条弹出消息,表明您的应用 com.example.firebaseauthapp 现已连接到您的 Firebase 项目。
  • 单击助手工具栏上的按钮并选择“接受更改”,将 Firebase 身份验证 SDK 添加到您的应用程序。
  • 完成后,您将在助手工具栏上看到一条提示,说明依赖项已正确设置。


  • 关闭工具栏并打开 Gradle。
  • 单击 Gradle 工具栏左上角的 Gradle 图标。
  • 在搜索栏上输入“signingRedport”,然后按 Enter 键。
  • 一旦构建分析器结果可用,请复制 SHA1 哈希值。
  • 返回 Firebase 控制台并单击项目概述,然后选择项目设置。

注意:如果您的项目中有多个应用程序,请转到项目概述,然后单击“应用程序”并选择您要验证的应用程序。

  • 导航到项目的底部并添加指纹。粘贴 SHA1 哈希值,然后选择“保存”。”您将收到一条提示,提示“已添加新证书指纹”。


第7步:向项目添加身份验证。

  • 打开“com/example/firebaseauthapp/SignUpActivity.java”文件。
  • 添加必要的导入,声明 FirebaseAuth 实例,并在注册活动的“onCreate”方法中对其进行初始化。它应该看起来像这样:
 package com.example.firebaseauthapp; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; public class SignUpActivity extends AppCompatActivity { // Declare any other necessary variables. private FirebaseAuth auth; private EditText signupEmail, signupPassword; private Button signupButton; private TextView loginRedirectText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_up); //Initialize the FirebaseAuth instance in the onCreate() auth = FirebaseAuth.getInstance(); signupEmail = findViewById(R.id.signup_email); signupPassword = findViewById(R.id.signup_password); signupButton = findViewById(R.id.signup_button); loginRedirectText = findViewById(R.id.loginRedirectText); signupButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String user = signupEmail.getText().toString().trim(); String pass = signupPassword.getText().toString().trim(); if (user.isEmpty()){ signupEmail.setError("Email cannot be empty"); } if(pass.isEmpty()){ signupPassword.setError("Password cannot be empty"); } else{ auth.createUserWithEmailAndPassword(user, pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if(task.isSuccessful()){ Toast.makeText(SignUpActivity.this, "Signup Successful", Toast.LENGTH_SHORT).show(); startActivity(new Intent(SignUpActivity.this, LoginActivity.class)); } else{ Toast.makeText(SignUpActivity.this, "Signup Failed" + task.getException().getMessage(), Toast.LENGTH_SHORT).show(); } } }); } } }); loginRedirectText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(SignUpActivity.this, LoginActivity.class)); } }); } }



  • 打开“com/example/firebaseauthapp/LoginActivity.java”文件。
  • 添加以下代码:


 package com.example.firebaseauthapp; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.util.Patterns; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; public class LoginActivity extends AppCompatActivity { private FirebaseAuth auth; private EditText loginEmail, loginPassword; private TextView signupRedirectText; private Button loginButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); auth = FirebaseAuth.getInstance(); loginEmail = findViewById(R.id.login_email); loginPassword = findViewById(R.id.login_password); loginButton = findViewById(R.id.login_button); signupRedirectText = findViewById(R.id.signupRedirectText); loginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String email = loginEmail.getText().toString(); String pass = loginPassword.getText().toString(); if(!email.isEmpty() && Patterns.EMAIL_ADDRESS.matcher(email).matches()) { if (!pass.isEmpty()) { auth.signInWithEmailAndPassword(email, pass) .addOnSuccessListener(new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { Toast.makeText(LoginActivity.this, "Login Successful", Toast.LENGTH_SHORT).show(); startActivity(new Intent(LoginActivity.this, MainActivity.class )); finish(); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(LoginActivity.this, "Login Failed", Toast.LENGTH_SHORT).show(); } }); } else { loginPassword.setError("Password cannot be empty"); } } else if (email.isEmpty()) { loginEmail.setError("Email cannot be empty"); } else { loginEmail.setError("Please enter a valid email"); } } }); signupRedirectText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(LoginActivity.this, SignUpActivity.class)); } }); } }


  • 运行应用程序并启动模拟器。


  • 您应该看到一个功能齐全的应用程序。
  • 转到 Firebase 控制台并单击“身份验证”。在“用户”选项卡下,您将看到新注册用户的列表。


通过执行这些步骤,您已成功集成 Firebase 并为您的应用程序设置用户身份验证。

Firebase 身份验证应用程序



结论


在本教程中,我们使用 Firebase 向 Android Java 应用程序添加用户身份验证。我们开发了一个应用程序,用户可以在其中创建帐户、注册和注销。我们还介绍了如何使用 Android 手机作为模拟器。

要扩展您对 Android 应用开发中的 Firebase 的了解,请参阅 Android 和 Firebase 文档。