Аутентификация пользователя с помощью 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
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;
public
class
MainActivity
РЕКОМЕНДУЕМЫЕ СТАТЬИ