본문 바로가기

Android Project

[Android/Kotlin] 커뮤니티앱(2) - 회원가입, 로그인, 비회원 가입 기능 구현

먼저 파이어베이스와 안드로이드 스튜디오를 연동해준뒤 build.gradle(Project)에 들어가서 아래코드를 작성해준다

dependencies{
    classpath("com.google.gms:google-services:4.4.0")
}

build.gradle(Project)

 

그리고 build.gradle(app)에서 아래 코드를 등록해주면 파이어베이스와 연동은 완료된다

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("com.google.gms.google-services")
}
dependencies {

     ...

    implementation("com.google.firebase:firebase-analytics-ktx:21.5.0")
    implementation(platform("com.google.firebase:firebase-bom:32.3.1"))
}

build.gradle(app)

 

그 다음엔 파이어베이스 Authenication에 들어가서 이메일/비밀번호, 익명을 활성화해준다

익명을 활성화시켜주는 이유는 비회원 로그인에 이용하기위해서이다

 

build.gradle(app)에 파이어베이스 인증을 위해 아래코드를 더 추가해준다

dependencies {

     ...
     
    implementation("com.google.firebase:firebase-auth-ktx")
}

build.gradle(app)

 

 

 

# 회원가입 기능추가

 

그다음에 JoinActivity로 가서 파이어베이스 공식문서에 나와있는데로 FirebaseAuth의 인스턴스를 선언하고,

onCreate() 메서드에서 FirebaseAuth 인스턴스를 초기화한다

package com.example.mysololife.auth


class JoinActivity : AppCompatActivity() {

    private lateinit var auth : FirebaseAuth

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

        auth = Firebase.auth

        auth.createUserWithEmailAndPassword("abc@abc.com", "abcdabcd")
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {

                    Toast.makeText(this, "성공", Toast.LENGTH_SHORT).show()

                } else {
                    Toast.makeText(this, "실패", Toast.LENGTH_SHORT).show()
                }
            }


    }
}

JoinActivity.kt

이렇게 해주고 회원가입버튼을 누르면 파이어베이스 Authenication에 아래와같이 사용자가 등록이 되는걸 볼수있다

 

 

이제는 내가 입력한 이메일과 비밀번호로 파이어베이스에 등록하고싶기때문에 코드를 수정해준다

조건도 몇가지 추가해줬고 아래와같이 코드를 수정해줬다

package com.example.mysololife.auth

class JoinActivity : AppCompatActivity() {

    private lateinit var auth : FirebaseAuth
    private lateinit var binding : ActivityJoinBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        auth = Firebase.auth

        binding = DataBindingUtil.setContentView(this, R.layout.activity_join)

        binding.joinBtn.setOnClickListener {

            var isGoToJoin = true


            // 사용자가 입력한 "이메일,비밀번호,비밀번호확인" 받아오기
            val email = binding.emailArea.text.toString()
            val password1 = binding.passwordArea1.text.toString()
            val password2 = binding.passwordArea2.text.toString()


            // 값이 비어있을때
            
            if (email.isEmpty()){
                Toast.makeText(this, "이메일을 입력해주세요", Toast.LENGTH_SHORT).show()
                isGoToJoin = false
            }

            if(password1.isEmpty()){
                Toast.makeText(this, "password를 입력해주세요", Toast.LENGTH_SHORT).show()
                isGoToJoin = false
            }


            if(password2.isEmpty()){
                Toast.makeText(this, "password를 입력해주세요", Toast.LENGTH_SHORT).show()
                isGoToJoin = false
            }


            // password1과 password2가 같은지 확인
            // 같지 않으면
            if(!password1.equals(password2)){
                Toast.makeText(this, "비밀번호를 똑같이 입력해주세요", Toast.LENGTH_SHORT).show()
                isGoToJoin = false
            }

            // 비밀번호가 6자 이상으로
            if (password1.length < 6) {
                Toast.makeText(this, "password를 6자리 이상으로 입력해주세요", Toast.LENGTH_SHORT).show()
                isGoToJoin = false
            }

            // isGoToJoin이 true이면 해당 코드 실행
            if(isGoToJoin) {

                auth.createUserWithEmailAndPassword(email, password1)
                    .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        Toast.makeText(this, "성공", Toast.LENGTH_SHORT).show()

                        // MainActivity로 이동
                        val intent = Intent(this, MainActivity::class.java)
                        // MainActivity에서 뒤로가기 눌렀을때 회원가입창 안나오도록(기존 엑티비티 날려버림)
                        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
                        startActivity(intent)

                    } else {
                        Toast.makeText(this, "실패", Toast.LENGTH_SHORT).show()
                    }
            }

            }

        }



    }
}

JoinActivity.kt

 

이렇게 코드를 짜주면 내가 입력한 이메일,비밀번호로 파이어베이스에 등록이되고, MainActivity에서 이전버튼을 눌렀을때 다시 회원가입창으로 오는게 아니라 앱이 아얘 나가지는것을 확인할수있다 

 

 

# 로그인 기능추가

이제 로그인 기능을 추가해볼것이다

 

회원가입에서 했던것과 똑같이 FirebaseAuth의 인스턴스를 선언하고 onCreate() 메서드에서 FirebaseAuth 인스턴스를 초기화해준뒤 아래와같이 코드를 작성해준다

package com.example.mysololife.auth

class LoginActivity : AppCompatActivity() {

    private lateinit var auth : FirebaseAuth
    private lateinit var binding : ActivityLoginBinding

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        auth = Firebase.auth

        binding = DataBindingUtil.setContentView(this,R.layout.activity_login)


        binding.loginBtn.setOnClickListener {

            // 사용자가 입력한 이메일,비밀번호 받아오기
            val email = binding.emailArea.text.toString()
            val password = binding.passwordArea.text.toString()

            // 로그인
            auth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this) { task ->

                    val intent = Intent(this, MainActivity::class.java)
                    //기존 엑티비티 날려버림
                    intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
                    startActivity(intent)

                    if (task.isSuccessful) {

                        Toast.makeText(this, "로그인 성공", Toast.LENGTH_SHORT).show()

                    } else {
                        Toast.makeText(this, "로그인 실패", Toast.LENGTH_SHORT).show()
                    }
                }

        }
    }
}

LoginActivity.kt

 

이렇게하면 로그인 기능까지 완료가 된것을 확인할수있다

 

# 비회원 가입

마지막으로 비회원가입 기능까지 해보겠다

IntroActivity로 가서 회원가입 버튼 클릭시, 비회원가입에 성공하면 MainActivity로 이동하고 실패하면 토스트 메시지를 띄우도록 했다. IntroActivity에 아래 코드를 추가해주자

// 비회원가입 버튼 클릭시
binding.noAccountBtn.setOnClickListener {
    // 익명 로그인
    auth.signInAnonymously()
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {

                // MainActivity로 이동
                val intent = Intent(this, MainActivity::class.java)
                //기존 엑티비티 날려버림
                intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
                startActivity(intent)
                
            } else {
                Toast.makeText(this, "익명 로그인 실패", Toast.LENGTH_SHORT).show()

            }
        }
}

IntroActivity.kt

 

이렇게하면 회원가입,로그인,비회원가입의 기능이 구현되는것을 볼수있다