app
> open module settings
> Dependencies
> +
> Library Dependency
> play-services-auth
입력 > OK
Firebase
- Sign-in-method
에서 google
추가var gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build()
googleSignInClient = GoogleSignIn.getClient(this, gso)
fun googleLogin() {
var signInIntent = googleSignInClient?.signInIntent
startActivityForResult(signInIntent, GOOGLE_LOGIN_CODE)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == GOOGLE_LOGIN_CODE) {
var result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
// result가 성공했을 때 이 값을 firebase에 넘겨주기
if(result!!.isSuccess) {
var account = result.signInAccount
// Second step
firebaseAuthWithGoogle(account)
}
}
}
fun firebaseAuthWithGoogle(account : GoogleSignInAccount?) {
var credential = GoogleAuthProvider.getCredential(account?.idToken,null)
auth?.signInWithCredential(credential)
?.addOnCompleteListener {
task ->
if(task.isSuccessful) {
// Login, 아이디와 패스워드가 맞았을 때
// Toast.makeText(this, "success", Toast.LENGTH_LONG).show()
moveMainPage(task.result?.user)
} else {
// Show the error message, 아이디와 패스워드가 틀렸을 때
Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show()
}
}
}
package org.techtown.howlstagram_f16
import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import com.google.android.gms.auth.api.Auth
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import com.google.android.gms.auth.api.signin.GoogleSignInClient
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.auth.GoogleAuthProvider
import kotlinx.android.synthetic.main.activity_login.*
class LoginActivity : AppCompatActivity() {
var auth : FirebaseAuth? = null
var googleSignInClient : GoogleSignInClient? = null
var GOOGLE_LOGIN_CODE = 9001
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
auth = FirebaseAuth.getInstance()
email_login_button.setOnClickListener {
signinAndSignup()
}
google_sign_in_button.setOnClickListener {
//First step
googleLogin()
}
var gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build()
googleSignInClient = GoogleSignIn.getClient(this, gso)
}
fun googleLogin() {
var signInIntent = googleSignInClient?.signInIntent
startActivityForResult(signInIntent, GOOGLE_LOGIN_CODE)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == GOOGLE_LOGIN_CODE) {
var result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
// result가 성공했을 때 이 값을 firebase에 넘겨주기
if(result!!.isSuccess) {
var account = result.signInAccount
// Second step
firebaseAuthWithGoogle(account)
}
}
}
fun firebaseAuthWithGoogle(account : GoogleSignInAccount?) {
var credential = GoogleAuthProvider.getCredential(account?.idToken,null)
auth?.signInWithCredential(credential)
?.addOnCompleteListener {
task ->
if(task.isSuccessful) {
// Login, 아이디와 패스워드가 맞았을 때
// Toast.makeText(this, "success", Toast.LENGTH_LONG).show()
moveMainPage(task.result?.user)
} else {
// Show the error message, 아이디와 패스워드가 틀렸을 때
Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show()
}
}
}
fun signinAndSignup() {
auth?.createUserWithEmailAndPassword(email_edittext.text.toString(),password_edittext.text.toString())
?.addOnCompleteListener {
task ->
if(task.isSuccessful) {
// Creating a user account
moveMainPage(task.result?.user)
} else if(task.exception?.message.isNullOrEmpty()) {
// Show the error message
Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show()
} else {
// Login if you have account
signinEmail()
}
}
}
fun signinEmail() {
auth?.signInWithEmailAndPassword(email_edittext.text.toString(),password_edittext.text.toString())
?.addOnCompleteListener {
task ->
if(task.isSuccessful) {
// Login, 아이디와 패스워드가 맞았을 때
moveMainPage(task.result?.user)
} else {
// Show the error message, 아이디와 패스워드가 틀렸을 때
Toast.makeText(this, task.exception?.message, Toast.LENGTH_LONG).show()
}
}
}
// 로그인이 성공하면 다음 페이지로 넘어가는 함수
fun moveMainPage(user:FirebaseUser?) {
// 파이어베이스 유저 상태가 있을 경우 다음 페이지로 넘어갈 수 있음
if(user != null) {
startActivity(Intent(this, MainActivity::class.java))
}
}
}
분명 다 맞게 했는데 구글 로그인 누르고 계정 선택해도 다음 화면으로 넘어가질 않아서 한참 헤맸다.. 강의는 10분도 안 되는데 1시간을 넘게 헤매기..
그리고 애먼 startActivityForResult
랑 onActivityResult
만 고치고 있었는데 문제는 얘가 아니었다.. 그리고 고쳐도 뭘 잘 못 쓴건지 더 안돼서 다시 돌아옴..
❗ startActivityForResult
랑 onActivityResult
는 deprecated 되었다고 함..! 그래서 코드를 고치고 싶은데 일단 강의부터 다 듣고 고쳐야지 또 하루종일 이것만 하고 있을 듯..
여튼 문제는 SHA-1
이 친구였음..
처음에 Sign-in-method
에서 google
추가할 때 떴던 창을 무시하고 넘어갔더니 이 사달이 난 거였다.
./gradlew signingReport
SHA1
키를 확인할 수 있는데 그 키를 Firebase
프로젝트 설정에서 추가해준다.