전체코드보기
Todolist앱 만들기 중 firebase에서 제공하는 authentication 사용하기 부분만 발췌했습니다.
//gradle
//firebase
implementation platform('com.google.firebase:firebase-bom:28.4.2')
// Declare the dependency for the Firebase Authentication library
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation 'com.google.firebase:firebase-auth'
//firebase ui
implementation 'com.firebaseui:firebase-ui-auth:7.2.0'
implementation 'androidx.work:work-runtime-ktx:2.7.0'
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var providers: ArrayList<AuthUI.IdpConfig>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//firebase가 제공하는 이메일로그인 ui 가져오기
providers = arrayListOf(
AuthUI.IdpConfig.EmailBuilder().build()
)
//현재 로그인이 안 되어 있으면 로그인 액티비티로 이동
if (FirebaseAuth.getInstance().currentUser == null) {
logIn()
}
private val signInLauncher = registerForActivityResult(
FirebaseAuthUIActivityResultContract()
) { res ->
this.onSignInResult(res)
}
fun logIn() {
// Create and launch sign-in intent
val signInIntent = AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(providers)
.build()
signInLauncher.launch(signInIntent)
}
//로그인 결과
private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult) {
val response = result.idpResponse
if (result.resultCode == RESULT_OK) {
// 로그인 성공 시
// 데이터를 불러온다.
model.reload()
} else {
// 로그인 실패 시
//로그인 실패 시 todo액티비티 finish
//(뒤로가기해도 todo activity가 보이지 않게)
finish()
}
}
//로그아웃
fun signOut() {
AuthUI.getInstance()
.signOut(this)
.addOnCompleteListener { }
logIn()
}
}