우선 처음에 파이어베이스에 로그인을 해서
새로운 프로젝트 생성 - package이름이랑 sha-1값 등을 입력 후 생성
그 후 생성하면서 다운받은 json파일을 아래 사진과 같이 저장
다음으로 gradle-project에서
repositories {
mavenCentral()
// Check that you have the following line (if not, add it):
google() // Google's Maven repository
}
dependencies {
// Add this line
classpath 'com.google.gms:google-services:4.3.8'
}
추가
gradle - module 에서
맨위 플러그인에 id 'com.google.gms.google-services' 추가
implementation platform('com.google.firebase:firebase-bom:30.3.0')
implementation 'com.google.firebase:firebase-analytics-ktx'
implementation 'com.google.firebase:firebase-auth-ktx'
implementation 'com.google.android.gms:play-services-auth:20.2.0'
추가 후 sync now
xml에서 google버튼 추가
<com.google.android.gms.common.SignInButton
android:id="@+id/Login_Button"
android:layout_width="292dp"
android:layout_height="35dp"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.495"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.742" />
자유롭게 변경하고 싶은대로
그 후 전체코드
auth = Firebase.auth
// [START config_signin]
// Configure Google Sign In
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build()
// [END config_signin]
//구글로그인
googleSignInClient = GoogleSignIn.getClient(this, gso)
val btn: SignInButton = findViewById(R.id.Login_Button)
btn.setOnClickListener {
googleSignInClient = GoogleSignIn.getClient(this, gso)
val signInIntent = googleSignInClient!!.signInIntent
startActivityForResult(signInIntent, RC_SIGN_IN)
//googleSignIn()
}
//onCreate 안에 아래 부터 밖에
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
val task = GoogleSignIn.getSignedInAccountFromIntent(data)
try {
// Google Sign In was successful, authenticate with Firebase
val account = task.getResult(ApiException::class.java)!!
Log.d(TAG, "firebaseAuthWithGoogle:" + account.id)
firebaseAuthWithGoogle(account.idToken!!)
} catch (e: ApiException) {
// Google Sign In failed, update UI appropriately
Log.w(TAG, "Google sign in failed", e)
}
}
}
private fun firebaseAuthWithGoogle(idToken: String) {
val credential = GoogleAuthProvider.getCredential(idToken, null)
auth.signInWithCredential(credential)
.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithCredential:success")
val user = auth.currentUser
updateUI(user)
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithCredential:failure", task.exception)
updateUI(null)
}
}
}
위와 같이 로그인구현이 가능. 다음에는 registerForActivityResult로 해보자
//추가
혹시 Google sign in failed
com.example.clonecoding_instagram requires the Google Play Store, but it is missing. com.google.android.gms.common.api.ApiException: 12500: 와 같은 오류발생 시
virtual device에서 구글플레이 스토어 표시가 있는 거로 그리고 api level 선택 중에서 target에 구글플레이 스토어 인 걸로 다시 시도하면 잘되는 것을 확인할 수 있었습니다.