-
Kotlin_ Kakao 로그인 연결하기 2Project1 2020. 5. 14. 13:59
* Android SDK v1 을 사용했습니다 *
오늘 만들 파일 목록
1. res > layout > activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/btn_kakao_login" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="36dp" android:text="카카오 로그인" app:layout_constraintBottom_toTopOf="@+id/btn_kakao_logout" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> <Button android:id="@+id/btn_kakao_logout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="36dp" android:text="카카오 로그아웃" app:layout_constraintBottom_toTopOf="@+id/btn_kakao_link_out" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> <Button android:id="@+id/btn_kakao_link_out" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="250dp" android:text="앱 연결 해제" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
2. GlobalApplication.kt 파일 생성 후 작성
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 } }
3. KakaoSDKAdapter.kt 파일 생성 후 작성
import com.kakao.auth.* open 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() } } }
4. SessionCallback.kt 파일 생성 후 작성
import android.util.Log 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 class SessionCallback : ISessionCallback { override fun onSessionOpenFailed(exception: KakaoException?) { Log.e("Log", "Session Call back :: onSessionOpenFailed: ${exception?.message}") } override fun onSessionOpened() { UserManagement.getInstance().me(object : MeV2ResponseCallback() { override fun onFailure(errorResult: ErrorResult?) { Log.i("Log", "Session Call back :: on failed ${errorResult?.errorMessage}") } override fun onSessionClosed(errorResult: ErrorResult?) { Log.i("Log", "Session Call back :: onSessionClosed ${errorResult?.errorMessage}") } override fun onSuccess(result: MeV2Response?) { Log.i("Log", "아이디 : ${result!!.id}") Log.i("Log", "이메일 : ${result.kakaoAccount.email}") Log.i("Log", "프로필 이미지 : ${result.profileImagePath}") checkNotNull(result) { "session response null" } } }) } }
5. MainActivity.kt
import android.annotation.SuppressLint import android.content.Intent import android.os.Bundle import android.util.Log import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import com.kakao.auth.* import com.kakao.auth.StringSet.id import com.kakao.kakaostory.StringSet.id import com.kakao.kakaotalk.StringSet.id import com.kakao.network.ErrorResult import com.kakao.usermgmt.UserManagement import com.kakao.usermgmt.callback.LogoutResponseCallback import com.kakao.usermgmt.callback.UnLinkResponseCallback import com.kakao.usermgmt.response.MeV2Response import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { private var callback: SessionCallback = SessionCallback() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Kakao LogIn btn_kakao_login.setOnClickListener { Session.getCurrentSession().addCallback(callback); Session.getCurrentSession().open(AuthType.KAKAO_TALK,this) } // Kakao LogOut btn_kakao_logout.setOnClickListener { val builder = AlertDialog.Builder(this) builder.setMessage("로그아웃 하시겠습니까?") builder.setPositiveButton("확인") { dialogInterface, i -> UserManagement.getInstance().requestLogout(object : LogoutResponseCallback() { override fun onCompleteLogout() { } }) dialogInterface.dismiss() } builder.setNegativeButton("취소") { dialogInterface, i -> dialogInterface.dismiss() } val dialog: AlertDialog = builder.create() dialog.show() Log.i("Log", "로그아웃 아이디 : ${MeV2Response.KEY_NICKNAME}") Log.i("Log", "로그아웃 프로필 이미지 : ${MeV2Response.KEY_PROFILE_IMAGE}") } // Kakao App Link Out btn_kakao_link_out.setOnClickListener { val builder = AlertDialog.Builder(this) builder.setMessage("앱 연결을 해제하시겠습니까?") builder.setPositiveButton("확인"){ dialogInterface, i -> UserManagement.getInstance().requestUnlink(object : UnLinkResponseCallback() { override fun onFailure(errorResult: ErrorResult?) { Log.i("Log",errorResult!!.toString()) } override fun onSessionClosed(errorResult: ErrorResult) { } override fun onNotSignedUp() { } override fun onSuccess(userId: Long?) { Log.i("Log",userId.toString()) } }) dialogInterface.dismiss() } builder.setNegativeButton("취소") { dialogInterface, i -> dialogInterface.dismiss() } val dialog: AlertDialog = builder.create() dialog.show() } } @SuppressLint("MissingSuperCall") override fun onDestroy() { Session.getCurrentSession().removeCallback(callback); } 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) } }
6. 결과물
'Project1' 카테고리의 다른 글
Kotlin_ Kakao 로그인 연결하기 1 (0) 2020.05.14 Android) Kotlin KeyHash 값 구하기 (1) 2020.04.10 안드로이드 카카오 로그인 서비스 넣기 (0) 2020.04.09 안드로이드 | 다음 지도 API 의 한계 (0) 2018.05.11