activity_main.xml의 모습
MainActivity.java에서 구현해야 할 목표
1. Login 버튼을 통해 id, password를 Firebase와 비교하여 맞을 경우 activity_chat.xml로 넘어가고, 틀릴 경우는 그대로 있도록 한다.
2. Sign Up 버튼을 통해 activity_register.xml로 넘어간다.
package com.example.firebase_practice;
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.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;
/* MainActivity에서 구현해야 할 대상
1. Sign Up 버튼을 클릭했을 때, Register 화면으로 넘어가기
2. Login 버튼을 통해 로그인 하여 ChatActivity 쪽 하면으로 넘어가기 */
public class MainActivity extends AppCompatActivity {
// (1) Button 변수 선언
private Button btn_Register;
// (2) Firebase Authentication (사용자 및 인증 관리) 가져오기
private FirebaseAuth auth;
// (2) id 및 password 변수 선언
private EditText et_id, et_password;
// (2) Login 버튼 선언
private Button btn_login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// (1) Sign Up 버튼을 activtiy_main의 id값을 가져와 연결하기
btn_Register = (Button) findViewById(R.id.btn_register);
// (1) Sign Up 버튼을 눌렀을 때 실행하는 곳 - 화면전환
btn_Register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// (1) MainActivity에서 RegisterActivity로 이동하는 Intent 객체 생성
Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
// (1) 화면전환 실행
startActivity(intent);
}
});
// (2) 변수 auth를 Firebase의 인스턴스에서 가져오기
auth = FirebaseAuth.getInstance();
// (2) id 및 password 를 activity_main 의 각 id값을 찾아 연결하기
et_id = (EditText) findViewById(R.id.et_id);
et_password = (EditText) findViewById(R.id.et_password);
// (2) LoginButton 을 activity_main 의 id 값에서 가져오기
btn_login = (Button) findViewById(R.id.btn_login);
// (2) Login 버튼을 클릭했을 경우 실행되는 곳
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// (2) email, pass 를 각 editText에서 적은 id와 password에서 String형으로 변환하여 텍스트를 가져옴
String email = et_id.getText().toString();
String pass = et_password.getText().toString();
// (2) 적은 email과 pass가 Firebase에 존재하는 사용자인지 확인하는 알고리즘
// public static final Pattern EMAIL_ADDRESS
// = Pattern.compile(
// "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
// "\\@" +
// "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
// "(" +
// "\\." +
// "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
// ")+"
// );
// -> email이 비어있지 않은 경우 + ****@****.** 형태일 경우
if(!email.isEmpty() && Patterns.EMAIL_ADDRESS.matcher(email).matches()){
// password가 비어있지 않은 경우
if(!pass.isEmpty()){
// authentication 의 저장되어 있는 email, password 비교
auth.signInWithEmailAndPassword(email, pass)
// password와 같을 경우
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
// 성공했다는 메시지 띄우기
Toast.makeText(MainActivity.this, "Login Successful", Toast.LENGTH_SHORT).show();
// 화면을 ChatActivity로 이동하기
startActivity(new Intent(MainActivity.this, ChatActivity.class));
finish();
}
// password와 다를 경우
}).addOnFailureListener(new OnFailureListener() {
@Override
// 실패했다는 문구 띄우기
public void onFailure(@NonNull Exception e) {
Toast.makeText(MainActivity.this, "Login Failed", Toast.LENGTH_SHORT).show();
}
});
}
// email 존재 및 일치 + password가 비었을 때
else{
et_password.setError("Password cannot be empty");
}
}
// email이 비어있을 때
else if(email.isEmpty()){
et_id.setError("Id(Email) cannot be empty");
}
// email이 비어있지 않음 + email 형식이 올바르지 않는 경우
else{
et_id.setError("Please enter valid email");
}
}
});
}
}
참고 자료 :
https://www.youtube.com/watch?v=TStttJRAPhE&ab_channel=AndroidKnowledge
좋은 정보 얻어갑니다, 감사합니다.