210202
Kotlin으로 Facebook 소셜 로그인 구현 + 유저 데이터 가져오기 본문
Kotlin으로 Facebook 소셜 로그인 구현하는 공식문서가 없어서 이것저것 참고해서 구현해봤다.
이전 java와 그대로 따라서 xml 파일에 Facebook 로그인 버튼까지 만든 상태로 다음과 같이 따라하면 된다.
1. Facebook 로그인 버튼 추가
override fun onCreate(savedInstanceState: Bundle?) {
...
var facebookButton = findViewById<Button>(R.id.loginButton_facebook)
facebookButton.setOnClickListener(View.OnClickListener {
}
}
2. 버튼이 눌렸을 때 콜백 관리자인 callbackManager 생성
private var callbackManager: CallbackManager? = null
.....
override fun onCreate(savedInstanceState: Bundle?) {
...
facebookButton.setOnClickListener(View.OnClickListener {
callbackManager = CallbackManager.Factory.create()
}
}
3. 로그인 결과에 응답하기 위해 LoginManager에 콜백 등록
override fun onCreate(savedInstanceState: Bundle?) {
...
facebookButton.setOnClickListener(View.OnClickListener {
callbackManager = CallbackManager.Factory.create()
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"))
LoginManager.getInstance().registerCallback(callbackManager,
object : FacebookCallback<LoginResult> {
override fun onSuccess(loginResult: LoginResult) {
}
override fun onCancel() {
}
override fun onError(error: FacebookException?) {
}
})
}
}
4. onActivityResult 함수에서 로그인 결과를 callbackManager를 통해 LoginManager에 전달
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
callbackManager?.onActivityResult(requestCode, resultCode, data)
}
이렇게 하면 페이스북 로그인 기능을 구현할 수 있다.
+ 유저 데이터 가져오기
registerCallback에서registerCallback에서 onSuccess 함수가 호출되면 accessToken을 받은 뒤 requestMe 함수를 호출해서 데이터를 가져오는 방식으로 구현했다.
onSuccess 구현
LoginManager.getInstance().registerCallback(callbackManager,
object : FacebookCallback<LoginResult> {
override fun onSuccess(loginResult: LoginResult) {
accessToken = loginResult.accessToken
requestMe(accessToken)
}
override fun onCancel() {
}
override fun onError(error: FacebookException?) {
}
})
requestMe 구현
fun requestMe(accessToken: AccessToken) {
val request = GraphRequest.newMeRequest(accessToken) { `object`, response ->
try {
//here is the data that you want
userEmail = `object`.getString("email")
Log.e("TAGG", userEmail)
userName = `object`.getString("name")
Log.e("TAGG", userName)
jobj1 = `object`.optJSONObject("picture")
Log.e("TAGG", jobj1.toString())
jobj2 = jobj1.optJSONObject("data")
Log.e("TAGG", jobj2.toString())
userPicture = jobj2.getString("url")
Log.e("TAGG", userPicture)
} catch (e: Exception) {
e.printStackTrace()
}
goTomain()
}
val parameters = Bundle()
parameters.putString("fields", "name,email,picture")
request.parameters = parameters
request.executeAsync()
}
참고 사이트
get user data(StackOverFlow): https://stackoverflow.com/questions/51736106/android-kotlin-facebook-login-get-user-data
코드파일
'Android' 카테고리의 다른 글
[Kotlin] RecyclerView를 ListView의 단일선택처럼 사용하기 (0) | 2020.03.20 |
---|---|
Kotlin 데이터 바인딩과 네비게이션을 사용하여 프래그먼트 구현 + 몇가지 오류들 해결 (0) | 2020.03.09 |
T Map API 다중마커 구현 + 풍선뷰 이벤트 처리(풍선뷰 누를 시 마커삭제) (0) | 2020.02.24 |
Retrofit을 사용한 서버통신(jsonplaceholder 사이트 사용) (0) | 2020.02.22 |
뷰페이저(ViewPager) FragmentStatePagerAdapter로 구현하기 + 특정 프래그먼트에 도달하면 다이얼로그 띄워주기 (0) | 2020.02.20 |
Comments