구현할 내용
- 사용자 별 정보를 나누기 위해 '회원가입/로그인' 기능 추가
- 로그인 한 전적이 있다면 자동 로그인
로그아웃, 회원탈퇴는 추후 생각
storage/DB를 연결했던 것과 동일하게, 코드를 작성하기 전 Firebase에서 Authentication을 생성하고 android studio에서 연동시켜주는 절차가 필요함
원래는 지도를 Main에 두었으나, 해당 코드들은 모두 MapActivity.kt와 activity_map.xml에 옮겼음.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".MainActivity">
<EditText
android:id="@+id/idET"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textEmailAddress"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="80dp"/>
<EditText
android:id="@+id/pwET"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPassword"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/idET" />
<TextView
android:id="@+id/idView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Email"
app:layout_constraintRight_toLeftOf="@id/idET"
app:layout_constraintTop_toTopOf="@id/idET"
app:layout_constraintBottom_toBottomOf="@id/idET"
android:layout_marginRight="10dp"
/>
<TextView
android:id="@+id/pwView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="PW"
app:layout_constraintRight_toLeftOf="@id/pwET"
app:layout_constraintTop_toTopOf="@id/pwET"
app:layout_constraintBottom_toBottomOf="@id/pwET"
android:layout_marginRight="10dp"
/>
<Button
android:id="@+id/joinBTN"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="회원가입"
app:layout_constraintTop_toBottomOf="@id/pwET"
app:layout_constraintLeft_toLeftOf="@id/pwET"
android:layout_marginTop="20dp"
/>
<Button
android:id="@+id/loginBTN"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="로그인"
app:layout_constraintTop_toBottomOf="@id/pwET"
app:layout_constraintRight_toRightOf="@id/pwET"
android:layout_marginTop="20dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>
class MainActivity : AppCompatActivity() {
lateinit var auth: FirebaseAuth
lateinit var email: String
lateinit var password: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
auth = FirebaseAuth.getInstance()
var joinBTN: Button = findViewById(R.id.joinBTN)
var loginBTN: Button = findViewById(R.id.loginBTN)
var idET: EditText = findViewById(R.id.idET)
var pwET: EditText = findViewById(R.id.pwET)
loginBTN.setOnClickListener{
email = idET.text.toString()
password = pwET.text.toString()
auth.signInWithEmailAndPassword(email,password) // 로그인
.addOnCompleteListener {
result->
if(result.isSuccessful){
var intent = Intent(this, MainActivity::class.java)
startActivity(intent)
} else {
Toast.makeText(this, "로그인 실패", Toast.LENGTH_LONG).show()
}
}
}
joinBTN.setOnClickListener{
email = idET.text.toString()
password = pwET.text.toString()
auth.createUserWithEmailAndPassword(email,password) // 회원 가입
.addOnCompleteListener {
result ->
if(result.isSuccessful){
Toast.makeText(this,"회원가입 완료",Toast.LENGTH_SHORT).show()
if(auth.currentUser!=null){
var intent = Intent(this, MapActivity::class.java)
startActivity(intent)
finish()
}
}
else if(result.exception?.message.isNullOrEmpty()){
Toast.makeText(this, "회원가입 실패", Toast.LENGTH_LONG).show()
}
}
}
}
override fun onStart() {
super.onStart()
val currentUser = auth!!.currentUser
updateUI(currentUser)
}
// 로그인 감지
private fun updateUI(currentUser: FirebaseUser?) {
if (currentUser != null) {
val intent: Intent = Intent(this, MapActivity::class.java)
startActivity(intent)
finish()
}
}
}