반응형
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 |