기존에 이용하던 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
'Mobile Programming > Android' 카테고리의 다른 글
[Kotlin] 페이스북 로그인 이용하기 (2020.08) (0) | 2020.08.26 |
---|---|
[Kotlin] 구글 로그인 이용하기 (2020.08) (4) | 2020.08.24 |
[Kotlin] 손전등 기능 사용하기 (0) | 2020.08.13 |
[Kotlin] 구글 지도로 현재 위치 나타내고 위경도 출력하기 (0) | 2020.08.07 |
[Kotlin] 갤러리 어플리케이션 만들기 (2) | 2020.08.06 |
댓글