[안드로이드&코틀린] 틴더앱 만들기#1, 파이어베이스 Authentication이용하여 로그인 회원가입 기능
최종 결과물이 아닌 본 게시글에서 공부했던 것의 결과물임. # 결과물 미리보기 아마 안드로이드의 가장 기초면서 가장 많이쓰이는 기술이 아닐까 싶다. 파이어베이스 Authentication을 이용하여 ema
devforyou.tistory.com
시험이 끝나서 오랜만에 안드로이드 공부를 다시 시작했다. 보니까 한달정도는 지난거 같아서, 까먹은것도 많은데 블로그 그럴때 블로글 한번씩 보는 중이다. 꽤 도움이 된다. 소셜 로그인기능중 페이스북을 구현해본다. 우리나라는 이제 페이스북은 별로 안쓰는거 같고, 카카오톡이나 네이버 로그인이 더 많이 쓰일거 같다. 근데 firebase에서는 기본 베이스로는 지원하지 않기 때문에 가장 흔히 사용하는 페이스북 소셜 로그인을 구현해본다.
# 준비
Facebook for Developers
Show Slide 1Show Slide 2Show Slide 3Show Slide 4Show Slide 5 META로 빌드하기 Facebook의 추천 플랫폼으로 고객과 소통하고 효율을 높여보세요. Messenger 플랫폼 편리하고 개인적인 사용자 경험을 통해 잠재 고객을
developers.facebook.com
먼저 페이스북 디벨로퍼에서 회원가입 한 후, 내 앱을 만든다.
간단한 로그인기능만 사용할거이기 때문에 소비자로 만들면 된다.
이후 내가 만든 앱에서 기본설정을 눌러 앱ID와 앱시크릿 코드를 복사하여
파이어 베이스의 authentication에 login-method에 페이스북을 추가 해당 값들을 복붙해준다.
그리고 다시 FaceBook(이제는 meta가 되어 버린..)으로 돌아와 저기서 하라는대로 한다. 몇개는 안해도 되는데 읽어보면서 필요한거 골라서 하면 된다.
# 기능 구현하기
## 레이아웃(XML)에 페이스북 로그인 버튼 추가
위 준비 과정을 다 맞추었다면, 내 안드로이드 스튜디오에는 페이스북과 잘 연동 돼 있을 것이다. 페이스북 로그인을 위한 버튼을 먼저 xml에 추가해주자.
<com.facebook.login.widget.LoginButton
android:id="@+id/facebookLoginButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/signupButton"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
LoginButton을 추가해주면 이쁘게 디자인 된 버튼이 생길 것이다.
## 액티비티에서 연동하기
먼저 우리가 사용하는 소셜로그인들은 버튼을 누르면, 새로운 페이지가 열리고 거기서 로그인 되면 다시 내 앱으로 돌아오는 형태이다. 여기서도 똑같다. 그렇게 다시 리턴을 받는 경우에는 onActivityResult를 사용한다. 그리고 그러한 것들은 페이스북내에 구현 된 callbackManger가 알아서 해준다.
### onActivityResult
private lateinit var callbackManager : CallbackManager
override fun onCreate(savedInstanceState: Bundle?) {
// ...
//페이스북 연결
callbackManager = CallbackManager.Factory.create()
// ...
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
callbackManager.onActivityResult(requestCode,resultCode,data)
}
### 로그인 버튼
이제 로그인 버튼을 누르고 나서 일련의 과정을 정의하자. 사실 이런 소셜 로그인은 이미 다 짜여있는 코드이기 때문에 딱히 복잡한 것은 없다.
private fun initFacebookLoginButton() {
val facebookLoginButton = binding.facebookLoginButton
// 어떤걸 받아올지 !
facebookLoginButton.setPermissions("email","public_profile")
facebookLoginButton.registerCallback(callbackManager,object: FacebookCallback<LoginResult>{
override fun onCancel() {
}
override fun onError(error: FacebookException) {
Toast.makeText(this@LoginActivity,"로그인에 실패했습니다",Toast.LENGTH_SHORT).show()
}
override fun onSuccess(result: LoginResult) {
val credential = FacebookAuthProvider.getCredential(result.accessToken.token)
auth.signInWithCredential(credential)
.addOnCompleteListener { task ->
if(task.isSuccessful) {
finish()
}else {
Toast.makeText(this@LoginActivity,"로그인에 실패했습니다",Toast.LENGTH_SHORT).show()
}
}
}
})
}
중요한 건 onSuccess이후 인데, credential을 로그인 시 받아오고, firebase에 받아온 credential을 통하여 로그인을 하는 것이다.
# 마치며
hash-key관련해서 이슈를 겪고 있는데 해결하면 추가적으로 수정하여 포스팅하도록 하겠다. 다시 안드로이드 공부도 열심히하고 슬슬 알고리즘 공부도 해야겠다.