Android - 소셜로그인(Kakao) with Kotlin

다용도리모콘·2020년 3월 12일
0

Kotlin으로 작성한 Kakao 소셜 로그인 코드

java로 되어 있는 코드들은 많은데 kotlin으로 작성한 코드를 본 적이 없어서 나중에 헷갈릴 때를 대비해서 아카이빙 해 놓습니다.
kakao developer에서 앱 등록하고 key 발급 받는 과정은 생략했습니다.

build.gradle

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven { url "https://jitpack.io" }
        /*카카오*/
        maven { url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/'}
    }
}

잊지말고 싱크!

string.xml

<string name="KAKAO_APP_KEY">여기에 카카오에서 발급받은 APP KEY를 넣으시오</string>

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

<application
        ...   
	<meta-data
            android:name="com.kakao.sdk.AppKey"
            android:value="@string/KAKAO_APP_KEY" />
		...
</application>

AppApplication.kt

override fun onCreate() {
        super.onCreate()
        KakaoSDK.init(KakaoSDKAdapter())
    }

AppApplication은 Application을 상속한 클래스입니다.

IntroActivity.kt

class IntroActivity : BaseActivity(), IntroContract.View {

	private val kakaoSessionCallback : KakaoSessionCallback = KakaoSessionCallback()

	fun loginKakao(){

        Session.getCurrentSession().addCallback(kakaoSessionCallback)
        Session.getCurrentSession().open(AuthType.KAKAO_TALK, this)
    }
    
        /**============================================================================================
     * 카카오 세션 콜백 메소드
     * =========================================================================================== */
    inner class KakaoSessionCallback : ISessionCallback {

        override fun onSessionOpened() {
            Log.d("세션 오픈 성공")
            presenter.loginKakao()
        }

        override fun onSessionOpenFailed(exception: KakaoException) {
            Log.d("Session Fail Error is " + exception.message)
        }
    }
    
}

IntroPresenter.kt

override fun loginKakao() {

        //회원 등록 시 요청할 정보의 파라미터를 배열에 넣는다
        val keys: ArrayList<String> =
            ArrayList()
        keys.add("properties.nickname")

        //회원 정보 요청하기
        UserManagement.getInstance().me(object : MeV2ResponseCallback() {
            override fun onFailure(errorResult: ErrorResult) {
                val message = "failed to get user info. msg=$errorResult"
                Log.e(message)
            }

            override fun onSessionClosed(errorResult: ErrorResult) {
                val message = "세션 닫임 / 이유 =$errorResult"
                Log.e(message)
            }

            override fun onSuccess(response: MeV2Response) {
                var name: String? = response.nickname
                if (name == null) {
                    Log.d("이름이 널이거나 양식에 맞지 않으면 기본 이름 들어감")
                    name = "이름 없음"
                }

                
            }
        })
    }

마치며..

개인 아카이빙을 위한 글이라 설명은 생략합니다.
kotlin을 막 시작한 참이라 Android Studio의 Java -> Kotlin 코드 변환 기능에 많이 의지한 터라 코틀린스럽지 못한 코드들이 많습니다.
피드백은 언제나 환영!

0개의 댓글