
카카오 로그인 API를 구현하기 위해서는 총 5가지 파일이 필요하다.
- activity_login.xml
- GlobalApplication.kt
- kakaoSDKAdapter.kt
- SessionCallback.kt
- LoginActivity.kt
1. activity_login.xml에 카카오 로그인 버튼 적용하기.
activity_login.xml에서 <com.kakao.usermgmt.LoginButton 이라고만 쳐도 자동으로 완성되지만, 보통의 경우 커스텀 버튼으로 구현하기 때문에 <Button> 태그를 사용한다.


2. GlobalApplication.kt
package com.example.smartice_closet.auth.kakao
import android.app.Application
import com.kakao.auth.KakaoSDK
class GlobalApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        instance = this
        KakaoSDK.init(KakaoSDKAdapter())
    }
    override fun onTerminate() {
        super.onTerminate()
        instance = null
    }
    fun getGlobalApplicationContext() : GlobalApplication {
        checkNotNull(instance) {
            "This Application does not inherit com.kakao.GlobalApplication"
        }
        return instance!!
    }
    companion object {
        var instance : GlobalApplication? = null
    }
}위의 코드를 작성하고 AndroidManifest.xml을 열어 <application> 태그 안에 다음과 같이 추가해 준다.
<application
        android:name=".auth.kakao.GlobalApplication"
3. KakaoSDKAdapter.kt 작성
package com.example.smartice_closet.auth.kakao
import com.kakao.auth.*
class KakaoSDKAdapter : KakaoAdapter() {
    override fun getSessionConfig() : ISessionConfig {
        return object : ISessionConfig {
            override fun getAuthTypes(): Array<AuthType> {
                return arrayOf(AuthType.KAKAO_LOGIN_ALL)
            }
            override fun isUsingWebviewTimer(): Boolean {
                return false
            }
            override fun getApprovalType() : ApprovalType? {
                return ApprovalType.INDIVIDUAL
            }
            override fun isSaveFormData(): Boolean {
                return true
            }
            override fun isSecureMode(): Boolean {
                return true
            }
        }
    }
    override fun getApplicationConfig() : IApplicationConfig {
        return IApplicationConfig {
            GlobalApplication.instance?.getGlobalApplicationContext()
        }
    }
}AuthType은 기본적으로 5가지의 Type이 있다.
| AuthType | 설명 | 
| KAKAO_TALK | 카카오톡 로그인 타입 제공 | 
| KAKAO_TALK_ONLY | 카카오톡 로그인 타입 제공 | 
| KAKAO_ACCOUT | 웹뷰를 통해 카카오 계정 연결 제공 | 
| KAKAO_STORY | 카카오 스토리 로그인 타입 제공 | 
| KAKAO_LOGIN_ALL | 모든 로그인방식 제공 | 
https://developers.kakao.com/sdk/reference/android-legacy/release/com/kakao/auth/AuthType.html
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
4. SessionCallback.kt
package com.example.smartice_closet.auth.kakao
import android.app.Activity
import android.content.Intent
import android.util.Log
import android.widget.Toast
import com.example.smartice_closet.auth.login
import com.example.smartice_closet.main
import com.kakao.auth.ISessionCallback
import com.kakao.network.ErrorResult
import com.kakao.usermgmt.UserManagement
import com.kakao.usermgmt.callback.MeV2ResponseCallback
import com.kakao.usermgmt.response.MeV2Response
import com.kakao.util.exception.KakaoException
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
class SessionCallback (val context: login): ISessionCallback {
    var userToken: String = ""
    private val USERNAME = "USERNAME"
    private val TOKEN = "USERTOKEN"
    private val USERGENDER = "USERGENDER"
    override fun onSessionOpenFailed(exception: KakaoException?) {
        Log.e("Log","Session Call Back :: onSessionOpenFailed: ${exception?.message}")
    }
    override fun onSessionOpened() {
        UserManagement.getInstance().me(object : MeV2ResponseCallback() {
            override fun onSuccess(result: MeV2Response?) {
                Log.i("Log", "ID : ${result!!.id}")
                Log.i("Log", "E-Mail : ${result.kakaoAccount.email}")
                Log.i("Log", "Gender : ${result.kakaoAccount.gender}")
                checkNotNull(result) {
                    "Session Response Null"
                }
                sendToServerKakao(result)
            }
            override fun onSessionClosed(errorResult: ErrorResult?) {
                Log.i("Log", "Session Call Back :: onSessionClosed ${errorResult?.errorMessage}")
            }
            override fun onFailure(errorResult: ErrorResult?) {
                Log.i("Log", "Session Call back :: on failed ${errorResult?.errorMessage}")
            }
        })
    }
}다양한 User Info를 받아오는 방법은 다음 게시글에서 다룬다.
5. LoginActivity.kt
package com.example.smartice_closet.auth
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.example.smartice_closet.auth.kakao.SessionCallback
import com.example.smartice_closet.main
import com.kakao.auth.AuthType
import com.kakao.auth.Session
class login : AppCompatActivity() {
    private var callback : SessionCallback = SessionCallback(this)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        kakao_login_btn.setOnClickListener { kakaoLogin() }
    }
    private fun kakaoLogin() {
        Session.getCurrentSession().addCallback(callback)
        Session.getCurrentSession().open(AuthType.KAKAO_LOGIN_ALL, this)
    }
    override fun onDestroy() {
        super.onDestroy()
        Session.getCurrentSession().removeCallback(callback)
    }
    public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (Session.getCurrentSession().handleActivityResult(requestCode, resultCode, data)) {
            Log.i("Log", "session get current session")
            return
        }
        super.onActivityResult(requestCode, resultCode, data)
    }
}
여기까지 구현을 완료하면 카카오 로그인 API를 이용해 사용자의 정보를 받아오는 기능이 완료된다.
LoginActivity에서 다른 Activity로 Intent 시키면 실제 로그인 과정처럼 화면이 넘어가는 것을 확인할 수 있다.
'Android > 기타 지식' 카테고리의 다른 글
| [SendBird] SendBird Chat SDK 개발 문서 정리 - 1. 시작 하기 (0) | 2021.07.03 | 
|---|---|
| Android Developer Roadmap (0) | 2021.04.28 | 
| openSSL로 Key Hash 구하기 (0) | 2020.08.10 | 
| [Kakao Auth] Android Studio로 카카오 로그인 API 사용하기 - 2. 구현 준비 (0) | 2020.07.31 | 
| [Kakao Auth] Android Studio로 카카오 로그인 API 사용하기 - 1. 시작하기 (0) | 2020.07.27 | 
 
                    
                   
                    
                  