모각코 6회차 결과

송민영·2023년 7월 27일
0

모각코 개인 블로그

목록 보기
12/12

1. android studio Login 만들기

MainActivity 작업하기

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

profile
컴퓨터융합학부

1개의 댓글

comment-user-thumbnail
2023년 7월 27일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기