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 - Facebook Login - get user data
I'm new in android developement and already searched for hours without finding the way how to get the damn user data after facebook login! This is the code: private var callbackManager: CallbackM...
stackoverflow.com
betranthanh/android-kotlin-loginfacebook
Android Kotlin Login Facebook using Facebook Sdk. Contribute to betranthanh/android-kotlin-loginfacebook development by creating an account on GitHub.
github.com