210202

Kotlin으로 Facebook 소셜 로그인 구현 + 유저 데이터 가져오기 본문

Android

Kotlin으로 Facebook 소셜 로그인 구현 + 유저 데이터 가져오기

dev210202 2020. 3. 8. 23:25

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

구현 코드: https://github.com/betranthanh/android-kotlin-loginfacebook/blob/master/app/src/main/java/com/bett/kotlinloginfacebook/MainActivity.kt

 

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

코드파일

MeeatNowKotlin.zip
1.08MB

Comments