Android/Firebase

[Firebase] 구글 로그인

lipnus 2018. 7. 22. 01:49
반응형


1. 

파이어베이스 콘솔의 문서로 가서 인증에 필요한 라이브러리를 Gradle에 입력한다.

버전 숫자가 안맞으면 에러가 날 수 있다. 같은 회사들 꺼는 버전을 똑같이 맞춰줘야 한다.




2.

xml에서 button대신 이렇게 입력하면 자동으로 구글버튼이 된다.

<com.google.android.gms.common.SignInButton
android:id="@+id/btn_google"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_marginTop="11dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btn_pw_search" />


이부분 에러났을때 gradle버전을 11.6.0이상으로 바꾸니까 정상실행 되었음

GoogleSignIn.getClient(this, gso);



3.

class MainActivity : AppCompatActivity() {

var authStateListener: FirebaseAuth.AuthStateListener? = null
var googleSignInClient: GoogleSignInClient? = null

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

//로그인 세션을 체크하는 부분
authStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->

Log.e("LLPP", "로그인")

var user = firebaseAuth.currentUser
if(user != null){
var iT = Intent(this, HomeActivity::class.java)
startActivity(iT)
}
}

//구글 로그인 옵션
var gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build()

//구글 로그인 클래스
googleSignInClient = GoogleSignIn.getClient(this, gso);

//버튼입력을 통합처리
btnClick()
}


구글버튼클릭

//구글로 접속
btn_google.setOnClickListener {
var signInIntent = googleSignInClient!!.signInIntent
startActivityForResult(signInIntent, 1)
}


override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)

if(requestCode==1 && resultCode == Activity.RESULT_OK){
//구글 로그인에 성공했을때 넘어오는 토큰값을 가지고 있는 Task
var task = GoogleSignIn.getSignedInAccountFromIntent(data)
//ApiException 캐스팅
var account = task.getResult(ApiException::class.java)
//Credentail 구글 로그인에 성공했다는 인증서
var credential = GoogleAuthProvider.getCredential(account.idToken, null)

//인증서를 Firebase에 넘겨줌(구글 사용자가 등록)
FirebaseAuth.getInstance().signInWithCredential(credential)
.addOnCompleteListener { task ->
if(task.isSuccessful){
Toast.makeText(this, "구글아이디 인증성공", Toast.LENGTH_LONG).show()
}else{
Toast.makeText(this, task.exception.toString(), Toast.LENGTH_LONG).show()
}
}
}
}




4. 

이때 중복해서 액티비티가 뜨는 버그가 발생

리스너를 onStop에서 떼었다가 다시 붙여야 되는데, 구글 액티비티를 요청하고 결과값을 받는 과정에서는 onStop생명주기가 발생하지 않음.

따라서 리스너를 제거하는 부분은 onPause에다가 해주어야 한다.

override fun onPause() {
super.onPause()
FirebaseAuth.getInstance().removeAuthStateListener (authStateListener!!)
}


반응형

'Android > Firebase' 카테고리의 다른 글

[Firebase] 탈퇴하기  (0) 2018.07.23
[Firebase] Facebook로그인  (0) 2018.07.23
[Firebase] 비밀번호 변경하기  (0) 2018.07.22
[Firebase] 이메일 유효성 확인  (0) 2018.07.22
[Firebase] 비밀번호 변경  (0) 2018.07.22