-
Caffeine Manage - Firebase Authentication 추가App 2021. 8. 19. 20:50
이전에 올렸던 프로토타입에서, 사용자별 데이터를 각각 데이터베이스로 관리하기 위해서 로그인 시스템을 추가했다.
연동해두었던 Firebase의 기능중 인증 기능을 사용했다.
Firebase Authentication을 추가하기위해 implementation을 추가했다.
implementation 'com.firebaseui:firebase-ui-auth:7.2.0'
그 후, firebase doc를 참고하여 LoginActivity를 작성해주었다.
LoginActivity.kt (Kotlin)
class LoginActivity : AppCompatActivity(){ private val signInLauncher = registerForActivityResult( FirebaseAuthUIActivityResultContract() ){ res -> this.onSignInResult(res) } private fun onSignInResult(result: FirebaseAuthUIAuthenticationResult){ val response = result.idpResponse if (result.resultCode == Activity.RESULT_OK){ val user = FirebaseAuth.getInstance().currentUser.toString() val intent = Intent(this, MainActivity::class.java) intent.putExtra("user_info",user) startActivity(intent) } else { Toast.makeText(this, response?.error?.errorCode.toString(), Toast.LENGTH_LONG).show() } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) // firebase Authentication // Choose authentication providers val providers = arrayListOf( AuthUI.IdpConfig.EmailBuilder().build(), AuthUI.IdpConfig.GoogleBuilder().build() ) // Create and launch sign-in intent val signinintent = AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.coffee_seed) .setTheme(R.style.Theme_Caffeinemanage) .build() signInLauncher.launch(signinintent) } }
로그인이 완료된 후 OnSignInResult로 결과가 들어가게 된다.
나는 MainActivity위의 Fragment에서 버튼을 누른 후 LoginActivity를 호출하는 형식으로 앱을 제작해서, LoginActivity에서 다시 MainActivity를 호출해주었다.
그리고 로그인 정보를 String 형식으로 변환해준 후 Intent를 이용해 MainActivity에 로그인 정보를 넘겨주었다.
추가적으로, Intent에 user_info 정보가 있을경우 로그인 버튼을 로그아웃 버튼으로 변환하는 코드도 추가했다.
SettingFragment.kt(Kotlin)
package com.example.caffeinemanage import android.app.Activity.RESULT_OK import android.content.Intent import androidx.fragment.app.Fragment import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.Toast import androidx.fragment.app.FragmentActivity import androidx.fragment.app.findFragment import com.firebase.ui.auth.AuthUI import com.firebase.ui.auth.FirebaseAuthUIActivityResultContract import com.firebase.ui.auth.data.model.FirebaseAuthUIAuthenticationResult import com.google.firebase.auth.FirebaseAuth class SettingFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val root = inflater.inflate(R.layout.fragment_setting, container, false) val noti_button = root.findViewById<Button>(R.id.set_noti) //fragment에서는 (activity as FragmentActivity)키워드를 사용 val fragmentmanager = (activity as FragmentActivity).supportFragmentManager val login_button = root.findViewById<Button>(R.id.set_login) login_button.setOnClickListener { if(login_button.text == "로그인"){ val loginIntent = Intent(this.activity, LoginActivity::class.java) startActivity(loginIntent) } else{ val logoutIntent = Intent(this.activity, LogoutActivity::class.java) startActivity(logoutIntent) } } noti_button.setOnClickListener { var transaction = fragmentmanager.beginTransaction() transaction.replace(R.id.fragment_frame, alarm_setting()) transaction.addToBackStack(null)//뒤로가기를 누르면 이전 프레그먼트로 되돌아감 transaction.commit() } if(activity?.intent?.hasExtra("user_info")!!){ login_button.text = "로그아웃" } else{ login_button.text = "로그인" } // Inflate the layout for this fragment return root } }
위에서 바뀐 로그아웃 버튼을 누르면, LogoutActivity로 연결된다.
LogoutActivity.kt(kotlin)
class LogoutActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_logout) AuthUI.getInstance() .signOut(this) .addOnCompleteListener { } val intent = Intent(this, MainActivity::class.java) startActivity(intent) } }
위에 Toast 형식으로 출력된 user_info를 키로 가지는 DataBase insert만 구현하면 데이터, 로그인 인증 부분은 완료된다.
'App' 카테고리의 다른 글
CaffeineManage (0) 2021.08.14 안드로이드 스튜디오 빌드타임 (0) 2021.07.31 카카오톡 학식봇 만들기(DynamoDB, 파라미터 검증 API) - 12 (0) 2021.07.21 카카오톡 학식봇 만들기(AWS Lambda, Kakao Skill) - 11 (0) 2021.07.19 카카오톡 학식봇 만들기(AWS Dynamo DB with lambda) - 10 (0) 2021.07.17