구글 회원가입 - firebase(복습)

Purang·2022년 8월 8일
0

FireBase

목록 보기
4/6

우선 처음에 파이어베이스에 로그인을 해서

새로운 프로젝트 생성 - 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에 구글플레이 스토어 인 걸로 다시 시도하면 잘되는 것을 확인할 수 있었습니다.

profile
몰입의 즐거움

0개의 댓글