본문 바로가기
Mobile Programming/Android

[Kotlin] 카카오 로그인 이용하기 (2020.08)

by 푸고배 2020. 8. 20.



기존에 이용하던 kakao 로그인 api가 좀 바뀌었다.

원래는 버튼 ui도 sdk로 지원했던 것 같은데.. 못찾는 건지 그냥 제공하는 ui 이미지를 사용했다.

연동 방법은 좀 더 간편해진 것 같다.


1. Kakao developers 설정


Kakao developers(https://developers.kakao.com)에 로그인한 후 [내 애플리케이션]>[애플리케이션 추가하기]를 선택해 새로운 앱을 생성한다.

앱 아이콘과 앱 이름, 회사 이름을 입력하고 저장을 눌러 앱 등록을 완료한다.


그 다음으로 플랫폼 등록(Android 플랫폼 등록)이 필요한데 Android의 경우, 키 해시 값이 등록되어 있지 않은 빌드에서 카카오 API를 호출하면 실패 응답을 받는다.




패키지명은 AndroidManifest.xml의 package= 어트리뷰트에 있는 string을 복붙해준다.

마켓 URL은 빌드 단계에서는 지정해줄 필요가 없다.

키 해시는 다음 과정에서 설명한다.


아래 과정은 필요한 경우 설정해주며 필수 과정은 아니다.



카카오 로그인은 카카오싱크, 카카오톡, 카카오스토리 등 사용자 정보 기반 서비스를 이용할 때 반드시 필요한 기능입니다. 카카오 로그인을 사용하려면 [내 애플리케이션] > [제품설정] > [카카오 로그인]에서 활성화 설정을 'ON'으로 선택한다.

카카오 로그인은 카카오싱크, 카카오톡, 카카오스토리 등 사용자 정보 기반 서비스를 이용할 때 반드시 필요한 기능입니다. 카카오 로그인을 사용하려면 [내 애플리케이션] > [제품설정] > [카카오 로그인]에서 활성화 설정을 'ON'으로 선택한다.


2. Android 프로젝트 환경설정

프로젝트의 Gradle 설정을 통해 Android SDK를 간편하게 연동할 수 있다. Android SDK를 적용할 프로젝트의 프로젝트 레벨 build.gradle에 다음과 같이 Android SDK 리파지토리(Repository)를 설정한다.


allprojects {     repositories {         google()         jcenter()         maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }     }

}


카카오 로그인 API는 카카오 로그인 모듈의 LoginClient가 제공한다. 로그아웃과 연결 끊기, 사용자 토큰 조회 API는 사용자 관리 모듈의 UserApiClient가 제공한다. 따라서 카카오 로그인 API를 사용하려면 카카오 로그인, 사용자 관리 모듈을 모두 설정해야한다.

다음과 같이 모듈 레벨의 build.gradle 파일에 카카오 로그인과 사용자 관리 모듈을 사용하도록 설정한다.


dependencies {

    ...

    implementation "com.kakao.sdk:v2-user:2.0.0"

    ...

}


카카오 API를 통해 카카오 서버와 통신하기 위해 앱에 인터넷 사용 권한을 설정해야 한다. AndroidManifest.xml에 다음과 같이 인터넷 사용 권한을 설정한다. 이 설정은 카카오 API를 통한 HTTP 요청이 올바르게 완료되도록 한다.


<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.sample">


    <!-- 인터넷 사용 권한 설정-->

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


    <application

    android:allowBackup="true"

        android:icon="@mipmap/ic_launcher"

    ...


MainActivity에서 Kakao SDK를 통해 키 해시를 구한다.

아래 과정을 통해 얻은 키 해시는 1번의 키 해시 항목에 붙여넣는다.


import com.kakao.sdk.common.util.Utility


// onCreate 함수 안

var keyHash = Utility.getKeyHash(this)

Log.d("KEY_HASH", keyHash)


3. Android 코드 수정


[res] > [values] > [string.xml][내 애플리케이션] > [앱 설정] > [요약 정보]에 나와있는 앱 키 중 네이티브 앱 키를 아래의 코드 부분을 수정하여 붙여넣기한다.

<string name="kakao_app_key">네이티브 앱 키</string>

그 후 아래의 코드를 AndroidManifest.xml 에 붙여넣기한다.

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

<activity android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="oauth"
android:scheme="kakao[네이티브앱 키]" />
</intent-filter>
</activity>

새로운 GlobalApplication.kt를 하나 만든 후 아래와 같은 코드로 kakaoSdk를 초기화 시켜준다.

import android.app.Application
import com.kakao.sdk.common.KakaoSdk

class GlobalApplication : Application() {

override fun onCreate() {
super.onCreate()
KakaoSdk.init(this, getString(R.string.kakao_app_key))
}

}

AndroidManifest.xml의  <application 태그에 name 속성을 android:name=".GlobalApplication" 로 바꿔준다. 


로그인을 구현할 Activity에 다음과 같은 소스코드를 이용해 카카오 로그인을 구현할 수 있다.


// 로그인 조합 예제


// 로그인 공통 callback 구성

val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->

    if (error != null) {

        Log.e(TAG, "로그인 실패", error)

    }

    else if (token != null) {

        Log.i(TAG, "로그인 성공 ${token.accessToken}")

    }

}


// 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인

if (LoginClient.instance.isKakaoTalkLoginAvailable(context)) {

    LoginClient.instance.loginWithKakaoTalk(context, callback = callback)

} else {

    LoginClient.instance.loginWithKakaoAccount(context, callback = callback)

}


로그인 이외의 로그아웃, 토큰 연결 끊기, 사용자 토큰 정보보기와 같은 내용은 API를 참고한다.


참고자료 : https://developers.kakao.com/docs/latest/ko/getting-started/app

반응형

댓글