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

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

经过 Grace Tamara Ekunola
Grace Tamara Ekunola HackerNoon profile picture

Grace Tamara Ekunola

@Temmarie

Software Developer

26 分钟 read2023/06/26
Read on Terminal Reader
Read this story in a terminal
Print this story

太長; 讀書

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

Grace Tamara Ekunola

@Temmarie

Software Developer

0-item
1-item

STORY’S CREDIBILITY

DYOR

DYOR

The writer is smart, but don't just like, take their word for it. #DoYourOwnResearch before making any investment decisions or decisions regarding your health or security. (Do not regard any of this content as professional investment advice, or health advice)

Code License

Code License

The code in this story is for educational purposes. The readers are solely responsible for whatever they build with it.

什么是 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”,然后单击“完成”。

image


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



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

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


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

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

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。

image


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

登录方式

登录方式


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

image


  • 关闭工具栏并打开 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 身份验证应用程序



结论


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

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




L O A D I N G
. . . comments & more!

About Author

Grace Tamara Ekunola HackerNoon profile picture
Grace Tamara Ekunola@Temmarie
Software Developer

標籤

这篇文章刊登在...

Read on Terminal Reader
Read this story in a terminal
 Terminal
Read this story w/o Javascript
Read this story w/o Javascript
 Lite
X REMOVE AD