Аутентификация пользователя с помощью Firebase в Android

Опубликовано: 5 Января, 2022

Firebase - это платформа для разработки мобильных и веб-приложений. Он предоставляет услуги, которые могут потребоваться веб-приложению или мобильному приложению. Firebase обеспечивает аутентификацию по электронной почте и паролю без дополнительных затрат на создание серверной части для аутентификации пользователя.

Шаги для аутентификации пользователя firebase:

  • Шаг 1:
    Создайте новый проект в студии Android или откройте существующий проект, в котором вы хотите добавить аутентификацию, и добавьте firebase в это приложение Android. Шаги по добавлению firebase очень хорошо объяснены по следующей ссылке: https://www.geeksforgeeks.org/ добавление-firebase-to-android-app /
  • Шаг 2:
    Перейдите в консоль Firebase (http://console.firebase.google.com/), перейдите к своему приложению и на вкладке аутентификации включите аутентификацию по электронной почте / проходу.
  • Шаг 3: activity_registration.xml
    Это ваша регистрационная активность. Он имеет два EditTexts, TextView, кнопку и индикатор выполнения. Все эти виды содержатся в линейной компоновке с вертикальной ориентацией. EditTexts используются для получения электронной почты и пароля от пользователя. Кнопка используется для регистрации после ввода имени пользователя и пароля.
    Полный xml-код для активности регистрации (activity_registration):

    activity_registration.xml

    <? xml version = "1.0" encoding = "utf-8" ?>
    <!-- Linear Layout with vertical orientation and other properties -->
    < 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:gravity = "center_vertical"
    android:orientation = "vertical"
    android:padding = "15dp"
    tools:context = ".RegistrationActivity" >
    <!-- TextView for heading -->
    < TextView
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:text = "Register" />
    <!-- Edit text for email -->
    < EditText
    android:id = "@+id/email"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:hint = "Enter your Email" />
    <!-- Edit text for password -->
    < EditText
    android:id = "@+id/passwd"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:hint = "Enter your Password"
    android:inputType = "textPassword" />
    <!-- Button for register with text "Register" -->
    < Button
    android:id = "@+id/btnregister"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:text = "Register" />
    <!-- ProgressBar for loading time -->
    < ProgressBar
    android:id = "@+id/progressbar"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:visibility = "gone" />
    </ LinearLayout >

  • Шаг 4: RegistrationActivity.java
    • Теперь очередь за кодом Java для регистрационной активности.
    • В этом случае к кнопке прикреплен прослушиватель в один клик. При нажатии кнопки вызывается registerNewUser (). В этом методе проверяется, не является ли какой-либо из параметров электронной почты и пароля пустым. В этом случае отображается сообщение об ошибке. Если оба текста Edit имеют данные, то вызывается метод createUserWithEmailAndPassword ().
    • Для регистрации нового пользователя используется функция createUserWithEmailAndPassword (), которая принимает два параметра: адрес электронной почты и пароль, для которых вы хотите зарегистрироваться. Внутри метода createUserWithEmailAndPassword () проверяется успешность задачи. Если задача выполнена успешно, пользователь перенаправляется на MainActivity или на панель управления, в противном случае отображается всплывающее сообщение с сообщением «ошибка регистрации».
    • Для аутентификации пользователя мы должны использовать ссылку на FirebaseAuth. Мы можем использовать ссылку с помощью функции getInstance. Фрагмент кода:
       FirebaseAuth mAuth = FirebaseAuth.getInstance ();

    Код Java для регистрационной активности:

    RegistrationActivity.java

    package com.geeksforgeeks.firebaseuserauthentication;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.content.Intent;
    import android.view.View;
    import android.widget.Toast;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Button;
    import com.google.firebase.auth.FirebaseAuth;
    import com.google.firebase.auth.AuthResult;
    import com.google.android.gms.tasks.OnCompleteListener;
    import com.google.android.gms.tasks.Task;
    public class RegistrationActivity extends AppCompatActivity {
    private EditText emailTextView, passwordTextView;
    private Button Btn;
    private ProgressBar progressbar;
    private FirebaseAuth mAuth;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
    super .onCreate(savedInstanceState);
    setContentView(R.layout.activity_registration);
    // taking FirebaseAuth instance
    mAuth = FirebaseAuth.getInstance();
    // initialising all views through id defined above
    emailTextView = findViewById(R.id.email);
    passwordTextView = findViewById(R.id.passwd);
    Btn = findViewById(R.id.btnregister);
    progressbar = findViewById(R.id.progressbar);
    // Set on Click Listener on Registration button
    Btn.setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v)
    {
    registerNewUser();
    }
    });
    }
    private void registerNewUser()
    {
    // show the visibility of progress bar to show loading
    progressbar.setVisibility(View.VISIBLE);
    // Take the value of two edit texts in Strings
    String email, password;
    email = emailTextView.getText().toString();
    password = passwordTextView.getText().toString();
    // Validations for input email and password
    if (TextUtils.isEmpty(email)) {
    Toast.makeText(getApplicationContext(),
    "Please enter email!!" ,
    Toast.LENGTH_LONG)
    .show();
    return ;
    }
    if (TextUtils.isEmpty(password)) {
    Toast.makeText(getApplicationContext(),
    "Please enter password!!" ,
    Toast.LENGTH_LONG)
    .show();
    return ;
    }
    // create new user or register new user
    mAuth
    .createUserWithEmailAndPassword(email, password)
    .addOnCompleteListener( new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete( @NonNull Task<AuthResult> task)
    {
    if (task.isSuccessful()) {
    Toast.makeText(getApplicationContext(),
    "Registration successful!" ,
    Toast.LENGTH_LONG)
    .show();
    // hide the progress bar
    progressBar.setVisibility(View.GONE);
    // if the user created intent to login activity
    Intent intent
    = new Intent(RegistrationActivity. this ,
    MainActivity. class );
    startActivity(intent);
    }
    else {
    // Registration failed
    Toast.makeText(
    getApplicationContext(),
    "Registration failed!!"
    + " Please try again later" ,
    Toast.LENGTH_LONG)
    .show();
    // hide the progress bar
    progressBar.setVisibility(View.GONE);
    }
    }
    });
    }
    }

  • Шаг 5: activity_login.xml
    Теперь после активности регистрации мы должны создать активность входа. Макет активности входа аналогичен активности регистрации с двумя текстами редактирования, одной кнопкой, текстовым представлением для заголовка, все содержится в линейном макете с вертикальной ориентацией. Вот полный код для XML-файла activity_login.xml:

    activity_login.xml

    <? xml version = "1.0" encoding = "utf-8" ?>
    <!-- Linear Layout with vertical orientation and other properties -->
    < LinearLayout
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:gravity = "center_vertical"
    android:orientation = "vertical"
    android:padding = "15dp"
    tools:context = ".LoginActivity" >
    <!-- TextView for heading -->
    < TextView
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:text = "Login" />
    <!-- Edit text for email -->
    < EditText
    android:id = "@+id/email"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:hint = "Enter your Email" />
    <!-- Edit text for password -->
    < EditText
    android:id = "@+id/password"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:hint = "Enter your Password"
    android:inputType = "textPassword" />
    <!-- Button for Login with text "Login" -->
    < Button
    android:id = "@+id/login"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:text = "Login" />
    <!-- ProgressBar for Loading Time -->
    < ProgressBar
    android:id = "@+id/progressBar"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:visibility = "gone" />
    </ LinearLayout >
  • Шаг 6: LoginActivity.java
    Здесь код очень похож на RegistratioActivity, но для входа в систему используется функция signInWithEmailAndPassword (), которая принимает адрес электронной почты и пароль в качестве параметра, и если этот пользователь с адресом электронной почты и паролем существует, вы будете перенаправлены на mainactivity или Dashboard. успех проверяется. Если задача выполнена успешно, пользователь перенаправляется на главную активность или на панель управления, в противном случае отображается всплывающее сообщение с надписью «Ошибка входа». Код Java для активности входа:

    LoginActivity.java

    package com.geeksforgeeks.firebaseuserauthentication;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.content.Intent;
    import android.view.View;
    import android.widget.Toast;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Button;
    import com.google.firebase.auth.FirebaseAuth;
    import com.google.firebase.auth.AuthResult;
    import com.google.android.gms.tasks.OnCompleteListener;
    import com.google.android.gms.tasks.Task;
    public class LoginActivity extends AppCompatActivity {
    private EditText emailTextView, passwordTextView;
    private Button Btn;
    private ProgressBar progressbar;
    private FirebaseAuth mAuth;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
    super .onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    // taking instance of FirebaseAuth
    mAuth = FirebaseAuth.getInstance();
    // initialising all views through id defined above
    emailTextView = findViewById(R.id.email);
    passwordTextView = findViewById(R.id.password);
    Btn = findViewById(R.id.login);
    progressbar = findViewById(R.id.progressBar);
    // Set on Click Listener on Sign-in button
    Btn.setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v)
    {
    loginUserAccount();
    }
    });
    }
    private void loginUserAccount()
    {
    // show the visibility of progress bar to show loading
    progressbar.setVisibility(View.VISIBLE);
    // Take the value of two edit texts in Strings
    String email, password;
    email = emailTextView.getText().toString();
    password = passwordTextView.getText().toString();
    // validations for input email and password
    if (TextUtils.isEmpty(email)) {
    Toast.makeText(getApplicationContext(),
    "Please enter email!!" ,
    Toast.LENGTH_LONG)
    .show();
    return ;
    }
    if (TextUtils.isEmpty(password)) {
    Toast.makeText(getApplicationContext(),
    "Please enter password!!" ,
    Toast.LENGTH_LONG)
    .show();
    return ;
    }
    // signin existing user
    mAuth.signInWithEmailAndPassword(email, password)
    .addOnCompleteListener(
    new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(
    @NonNull Task<AuthResult> task)
    {
    if (task.isSuccessful()) {
    Toast.makeText(getApplicationContext(),
    "Login successful!!" ,
    Toast.LENGTH_LONG)
    .show();
    // hide the progress bar
    progressBar.setVisibility(View.GONE);
    // if sign-in is successful
    // intent to home activity
    Intent intent
    = new Intent(LoginActivity. this ,
    MainActivity. class );
    startActivity(intent);
    }
    else {
    // sign-in failed
    Toast.makeText(getApplicationContext(),
    "Login failed!!" ,
    Toast.LENGTH_LONG)
    .show();
    // hide the progress bar
    progressbar.setVisibility(View.GONE);
    }
    }
    });
    }
    }

  • Шаг 7: activity_main.xml
    Это действие на панели инструментов, которое содержит простой текстовый вид в относительном макете. Код выглядит следующим образом:

    activity_main.xml

    < RelativeLayout
    android:layout_width = "fill_parent"
    android:layout_height = "fill_parent"
    android:gravity = "center"
    tools:context = ".MainActivity" >
    < TextView
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:text = "GeeksForGeeks(Firebase Authentication)"
    android:textSize = "20dp"
    />
    </ RelativeLayout >
  • Шаг 8: MainActivity.java
    MainActivity содержит код для панели управления, на которую пользователь перенаправляется после входа в систему или регистрации.

    MainActivity.java

    package com.geeksforgeeks.firebaseuserauthentication;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.content.Intent;
    import android.view.View;
    import android.widget.Toast;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Button;