본문 바로가기
혼공노트

안드로이드 맛집 어플 만들기 (3) Firebase 이메일/비번 로그인

by 김비거 2024. 6. 15.

 

 

* 이 글은 인프런 강의 <[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린>을 보고 정리한 글입니다.

 


세부목표 (3)

 

Firebase 프로젝트를 생성한다.

SplashActivity에서 로그인을 이미 하였으면 MainActivity로, 로그인을 안 했다면 JoinActivity로 넘어간다.

JoinActivity에서 이메일과 비번을 입력하여 회원가입을 한다.

회원가입 버튼을 누르면 MainActivity로 넘어간다.

 

 

파이어베이스 프로젝트 생성, 인증 설정

 

파이어베이스 프로젝트 생성과 인증에 관련된 법은 다음 링크 글에서 이미 소개를 하였다.

 

https://ds3qej.tistory.com/49

 

파이어베이스 인증과 실시간 데이터베이스 사용하기 (1)

* 이 글은 인프런 강의 을 보고 정리한 글입니다. 목표 파이어베이스의 인증(비회원 로그인), 실시간 데이터베이스를 사용하여나만의 운동 메모장을 만들어보자.  1. 파이어베이스 프로젝트

ds3qej.tistory.com

 

 

여기서는 인증을 이메일/비밀번호를 사용하겠다고 체크를 한다.

 

 

 

 

SplashActivity

 

회원가입을 하지 않았다면 JoinActivity로 이동하고

회원가입을 이미 하였다면 MainActivity로 이동한다.

 

class SplashActivity : AppCompatActivity() {

    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)

	// FirebaseAuth 인스턴스를 초기화
        auth = Firebase.auth

         // 현재 사용자의 UID가 null인지 확인
        if (auth.currentUser?.uid == null) {
            // UID가 null이면 3초 후 JoinActivity로 전환
            Handler().postDelayed({
                startActivity(Intent(this, JoinActivity::class.java))
                // SplashActivity를 종료
                finish()
            }, 3000)
        } else {
            // UID가 null이 아니면 3초 후 MainActivity로 전환
            Handler().postDelayed({
                startActivity(Intent(this, MainActivity::class.java))
                // SplashActivity를 종료
                finish()
            }, 3000)
    	}

    }
}

 

 

 

activity_join.xml

 

JoinActivity의 회원가입 창 레이아웃을 만든다.

 

<?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"
    tools:context=".JoinActivity"
    android:orientation="vertical">

    <EditText
        android:id="@+id/emailArea"
        android:layout_margin="20dp"
        android:hint="email"
        android:layout_width="match_parent"
        android:layout_height="50dp"/>

    <EditText
        android:id="@+id/passwordArea"
        android:layout_margin="20dp"
        android:hint="password"
        android:layout_width="match_parent"
        android:layout_height="50dp"/>

    <Button
        android:id="@+id/joinBtn"
        android:text="회원가입"
        android:layout_margin="20dp"
        android:padding="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

 

회원가입 창

 

 

JoinActivity

 

회원가입이 정상적으로 되었을 경우 MainActivity로 넘어가도록 한다.

 

파이어베이스 비밀번호 인증에 대한 코드는 다음 링크에 소개되어 있다.

https://firebase.google.com/docs/auth/android/password-auth?hl=ko

 

Android에서 비밀번호 기반 계정으로 Firebase에 인증  |  Firebase Authentication

Google I/O 2023에서 Firebase의 주요 소식을 확인하세요. 자세히 알아보기 의견 보내기 Android에서 비밀번호 기반 계정으로 Firebase에 인증 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를

firebase.google.com

 

 

class JoinActivity : AppCompatActivity() {

    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_join)

        // FirebaseAuth 인스턴스를 초기화
        auth = Firebase.auth

        // activity_join 레이아웃에서 joinBtn 버튼을 찾아 joinBtn 변수에 할당
        val joinBtn = findViewById<Button>(R.id.joinBtn)
        // joinBtn에 클릭 리스너를 설정
        joinBtn.setOnClickListener {

            // activity_join 레이아웃에서 emailArea와 passwordArea EditText를 찾아 email과 password 변수에 할당
            val email = findViewById<EditText>(R.id.emailArea)
            val password = findViewById<EditText>(R.id.passwordArea)

            // FirebaseAuth를 사용하여 이메일과 비밀번호로 새로운 사용자 생성
            auth.createUserWithEmailAndPassword(email.text.toString(), password.text.toString())
                .addOnCompleteListener(this) { task ->
                    // 사용자가 성공적으로 생성된 경우
                    if (task.isSuccessful) {
                        // MainActivity로 전환하기 위한 Intent 생성
                        val intent = Intent(this, MainActivity::class.java)
                        // MainActivity를 시작
                        startActivity(intent)
                    } else {
                        // 사용자가 생성되지 않은 경우 오류 로그 출력
                        Log.w("JOINActivity", "createUserWithEmail:failure", task.exception)
                    }
                }
        }
    }
}

 

 

로그인이 안 되었을 경우 Splash에서 회원가입 창으로 인동한다

 

이메일과 비번을 입력하여 회원가입을 한다

 

회원가입 버튼을 누르면 MainActivity 화면이 나온다

 

 

 

 

댓글