[Android/Kotlin] 카카오 로그인/회원가입

2024. 2. 21. 17:09·App&Web/Android

나는 이렇게 Access Token만 발급 받고 검증은 백엔드측에 넘겼다.

 

순서는 아래와 같다.

  1. 카카오 로그인/회원가입 요청한다.
  2. 카카오 측에서 이미 회원일 경우 로그인 처리, 회원이 아닐 경우 회원가입 처리 후 Access Token을 발급하여 전달한다.
  3. 받은 Access Token을 백엔드(서버)로 전달한다.
  4. 백엔드(서버)측이 전달받은 Access Token을 통해 다시 카카오를 통해서 검증을 하고 사용자 정보를 전달한다.
  5. 받은 정보를 jwt에 저장한다.

 

 3~5번은 사람마다 다르게 작업하기 때문에 1~2번까지만 설명을 하겠다.

 

 

카카오 문서에 설정이 잘 나와있으니 보며 그대로 따라하면 된다.

https://developers.kakao.com/docs/latest/ko/kakaologin/android

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

1. gradle에 설정 추가

build.gradle.kts

implementation ("com.kakao.sdk:v2-user:2.19.0")

 

settings.gradle.kts

dependencyResolutionManagement {    
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)    
        repositories {        
            google()        
            mavenCentral()        
            maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }    
    }
}

 

2. String.xml에 네이티브 키 추가

2-1. Kakao Developers에 내 애플리케이션 > 사용할 애플리케이션 > 앱 설정 - 요약 정보 > 앱 키 > 네이티브 키 복사

2-2. res > values > string.xml에 네이티브 키 추가

<resources>
    <string name="app_name">앱 이름</string>

    <string name="kakao_app_key">{여기에 네이티브 키}</string>
    <string name="scheme_kakao_app_key">{여기에 kakao네이티브 키}</string>
</resources>

 

만약 네이티브 키가

wjtoiehg/ew=

라면

<resources>
    <string name="app_name">앱 이름</string>

    <string name="kakao_app_key">wjtoiehg/ew=</string>
    <string name="scheme_kakao_app_key">kakaowjtoiehg/ew=</string>
</resources>

이렇게 넣으면 된다.

 

 

3. GlobalApplication.kt 추가

3-1. GlobalApplication.kt 추가

import android.app.Application
import android.util.Log
import com.kakao.sdk.common.KakaoSdk
import com.kakao.sdk.common.util.Utility
import com.umc.anddeul.R

class GlobalApplication: Application() {
    override fun onCreate() {
        super.onCreate()

        var keyHash = Utility.getKeyHash(this)
        Log.d("키 확인", keyHash)
        KakaoSdk.init(this, getString(R.string.kakao_app_key))
    }
}

 

3-2. AndroidManifest.xml에 추가

    <application
        android:name=".GlobalApplication"

 

 

4. 해시 키 저장

3번 실행 후 로그에 출력된 KeyHash를 내 애플리케이션 > 사용할 애플리케이션 > 앱 설정 - 플랫폼 > Android > 수정 > 키 해시 칸에 추가

 

 

5. AndroidManifest.xml에 액티비티(Activity) 설정

액티비티 명도 수정하지 않고 그대로 해야 한다.

     <activity
            android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
            android:exported="true">
            <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="@string/scheme_kakao_app_key" />
            </intent-filter>
        </activity>

 

 

6. 카카오 로그인/회원가입으로 이동

6-1. 카카오톡으로 로그인 (카카오톡 설치 안되있을 시 카카오계정 로그인으로 이동함)

// 카카오계정으로 로그인 공통 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 (UserApiClient.instance.isKakaoTalkLoginAvailable(context)) {
    UserApiClient.instance.loginWithKakaoTalk(context) { token, error ->
        if (error != null) {
            Log.e(TAG, "카카오톡으로 로그인 실패", error)

            // 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
            // 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기)
            if (error is ClientError && error.reason == ClientErrorCause.Cancelled) {
                return@loginWithKakaoTalk
            }

            // 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인 시도
            UserApiClient.instance.loginWithKakaoAccount(context, callback = callback)
        } else if (token != null) {
            Log.i(TAG, "카카오톡으로 로그인 성공 ${token.accessToken}")
            //// 여기서 받은 토큰 백엔드로 전달하는 코드 추가해야 함
        }
    }
} else {
    UserApiClient.instance.loginWithKakaoAccount(context, callback = callback)
}

 

6-2. 카카오계정으로 로그인

// 카카오계정으로 로그인
UserApiClient.instance.loginWithKakaoAccount(context) { token, error ->
    if (error != null) {
        Log.e(TAG, "로그인 실패", error)
    }
    else if (token != null) {
        Log.i(TAG, "로그인 성공 ${token.accessToken}")
    }
}

 

만약 기존 카카오계정이 아닌 다른 계정으로 로그인하고 싶을 때엔 

prompts = listOf(Prompt.LOGIN)

를 추가하면 된다.

 

따라서 

// 카카오계정으로 로그인
UserApiClient.instance.loginWithKakaoAccount(context, prompts = listOf(Prompt.LOGIN)) { token, error ->
    if (error != null) {
        Log.e(TAG, "로그인 실패", error)
    }
    else if (token != null) {
        Log.i(TAG, "로그인 성공 ${token.accessToken}")
    }
}

이렇게 된다.

'App&Web > Android' 카테고리의 다른 글

[Android/Kotlin] 음성 녹화  (0) 2024.02.21
[Android/Kotlin] 음성 재생/일시정지  (0) 2024.02.21
[Android/Kotlin] Custom Dialog (팝업)  (0) 2024.02.21
[Android/Kotlin] 주간 달력 만들기  (0) 2024.02.21
[Android/Kotlin] fragment에서 fragment로 이동  (0) 2024.02.21
'App&Web/Android' 카테고리의 다른 글
  • [Android/Kotlin] 음성 녹화
  • [Android/Kotlin] 음성 재생/일시정지
  • [Android/Kotlin] Custom Dialog (팝업)
  • [Android/Kotlin] 주간 달력 만들기
2월2
2월2
  • 2월2
    서벅돌의 성장일기
    2월2
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • TIL (2)
      • Server (28)
        • spring (7)
        • node.js (16)
        • 기타 (5)
      • App&Web (17)
        • Web (1)
        • Android (16)
        • iOS (0)
      • 공부 (59)
        • 깃&깃허브 (3)
        • 파이썬 (17)
        • 유니티 (4)
        • 자료구조 | 알고리즘 (15)
        • 자바 (3)
        • 운영체제 (8)
        • AI와 데이터 (9)
      • 대외활동 (12)
        • NPC 동아리 (1)
        • UMC 동아리 (11)
      • 대학교 (1)
        • 교직 (1)
      • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글 관리
  • 링크

  • 공지사항

    • Notice
  • 인기 글

  • 태그

    Android
    루아
    Lua
    Python
    C
    유니티
    파이썬
    Unity
    코틀린
    mysql
    kotlin
    java
    안드로이드
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
2월2
[Android/Kotlin] 카카오 로그인/회원가입
상단으로

티스토리툴바