-
안드로이드 코틀린 : 파이어베이스 구글 로그인 ( Firebase Google Login )프로그래밍/Android(Kotlin) 2020. 6. 30. 16:20반응형
안녕하세요, 랴파파입니다.
오늘은 파이어베이스의 계정 ( Authentication : Google ) 기능을 사용해서
아래와 같은 프로그램을 만들어 볼 예정입니다.
이 기능을 사용하면 다운로드하여 사용하는 유저의 구글 계정을 사용하여
로그인할 수 있도록 구성할 수 있습니다.
Authentication을 적용한 예제 프로그램 화면 1. 파이어베이스 계정 ( Firebase Authentication : Google ) 설정
연동한 Firebase Console에서의 Authentication 설정 화면 먼저 위의 그림과 같이 Firebase Console에서 Authentication 설정 화면을 찾아 위와 같이 설정을 합니다. 위의 탭에서 "Sign-in method"를 찾아 클릭하면 로그인 제공업체 리스트들을 볼 수 있습니다. 그중에서 Google을 사용 설정으로 변경합니다.
2. 라이브러리 ( Library ) 추가
< build.gradle(Module:app) >에서 아래의 사진과 같이 < implementation 'com.google.firebase:firebase-auth:19.3.1' >를 입력하시고 오른쪽 상단에 표시되는 < Sync Now >를 눌러서 Firebase Authentication 기능을 사용할 수 있도록 설정해주시기 바랍니다.
dependencies { ... implementation 'com.google.firebase:firebase-auth:19.3.1' ... }
3. 레이아웃 ( Layout ) 구성
레이아웃 구성은 간단하게 Google Login을 위해 사용할 버튼을 하나 추가하였습니다. 해당 레이아웃에 대한 XML Code는 아래와 같습니다.
파일명 : activity_login.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" tools:context=".LoginActivity"> <Button android:id="@+id/xml_btn_main_googleLogin" android:text="Google Login" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="10dp"/> <Button ...> <com.google.android.gms.ads.AdView ...> </com.google.android.gms.ads.AdView> </LinearLayout>
4. 코틀린 소스코드 ( Kotlin Source Code ) 구성
먼저 위의 activity_login.xml 과 연동되어 있는 LoginActivity.kt ( Kotlin Source Code )를 함수 별로 살펴보도록 하겠습니다. onCreate 함수에는 Google 로그인을 적용하기 위한 Initialize Sequence와 Google 로그인 버튼을 클릭했을 때 발생하는 리스너가 정의되어 있고, onActivityResult 함수에는 맨 위의 예제 그림과 같이 Google 로그인을 위한 새 창을 띄워주기 위해 구성이 되어 있습니다. fun_FirebaseAuthGoogle 함수에서 Google 로그인 정보를 확인하고 fun_MoveNextPage에서 로그인이 완료 시 다음 액티비티(페이지)로 넘어가고 LoginActivity는 종료시키도록 구성이 되어 있습니다.
... import android.content.Context import android.content.Intent import android.content.pm.PackageInfo import android.content.pm.PackageManager import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import android.util.Base64 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.android.gms.common.api.ApiException import com.google.firebase.auth.FacebookAuthProvider import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.GoogleAuthProvider import kotlinx.android.synthetic.main.activity_login.* import java.security.MessageDigest import java.security.NoSuchAlgorithmException import java.util.* class LoginActivity : AppCompatActivity() { // Google Sign-In Methods var googleSignInClient : GoogleSignInClient? = null val RC_SIGN_IN = 1000 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_login) // Google Sign-In Methods var gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build() googleSignInClient = GoogleSignIn.getClient(this, gso) xml_btn_main_googleLogin.setOnClickListener { var signInIntent = googleSignInClient?.signInIntent startActivityForResult(signInIntent, RC_SIGN_IN) } } // Move to MainActivity fun fun_MoveNextPage(){ var currentUser = FirebaseAuth.getInstance().currentUser if(currentUser != null){ startActivity(Intent(this, MainActivity::class.java)) this.finish() } } // Google Sign-In Methods fun fun_FirebaseAuthWithGoogle(acct : GoogleSignInAccount?){ var credential = GoogleAuthProvider.getCredential(acct?.idToken, null) FirebaseAuth.getInstance().signInWithCredential(credential).addOnCompleteListener { task -> if(task.isSuccessful){ fun_MoveNextPage() } } } //Override override fun onResume() { super.onResume() fun_MoveNextPage() //Automatic Login } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) // Google Sign-In Methods if(requestCode == RC_SIGN_IN){ val task = GoogleSignIn.getSignedInAccountFromIntent(data) try{ val account = task.getResult(ApiException::class.java) fun_FirebaseAuthWithGoogle(account) } catch (e : ApiException){ } } else{ } } }
그리고 두 번째로 아래의 MainActivity.kt에는 Google Login 성공 이후 다음 액티비티(정확하게 이야기하면 프래그먼트)에 Google 로그아웃을 구성해놓았습니다. "FirebaseAuth.getInstance().signOut()"은 Google 계정 로그아웃에 대한 함수입니다. 그리고 "googleSignInClient.signOut()"은 재로그인 시에 예전에 로그인 이력이 있는 Google 계정으로 자동 로그인되는 것을 방지해줍니다.
private lateinit var activity : MainActivity private lateinit var googleSignInClient: GoogleSignInClient override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment val view : View = inflater.inflate(R.layout.fragment_main_setting, container, false) // Google Sign-In Methods var gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build() googleSignInClient = GoogleSignIn.getClient(view.context, gso) view.xml_frg_setting_logout.setOnClickListener { view -> FirebaseAuth.getInstance().signOut() //Google Login Initialize googleSignInClient.signOut().addOnCompleteListener { activity.finish() } } return view }
이것으로 오늘은 Firebase Authentication : Google 계정을 활용해서 예제 프로그램을 구성해봤는데요.
오늘 글도 여러분께 많은 도움이 됐기를 희망합니다.
감사합니다!
반응형'프로그래밍 > Android(Kotlin)' 카테고리의 다른 글
안드로이드 코틀린 : SharedPreferences (1) 2020.07.03 안드로이드 코틀린 : 파이어베이스 페이스북 로그인 ( Firebase Authentication : Facebook Login ) (1) 2020.07.01 안드로이드 코틀린 : 프래그먼트 ( Fragment ) & Bottom Navigation View (1) 2020.06.29 안드로이드 코틀린 : 파이어베이스 리모트 컨피그 ( Firebase Remote Config ) (0) 2020.06.28 안드로이드 코틀린 : 리사이클러뷰 ( RecyclerView ) (1) 2020.06.23