[AOS] Kakao Login

2024. 2. 13. 14:28dev/aos

728x90
반응형

카카오 공식 문서에서 적혀진 많은 양의 정보에 주눅들지 않길,

필자가 설명하는 방법대로 차근차근 따라오면 카카오가 얼마나 편하고 친절하게 API를 만들었는지 알 수 있음.

 

처음엔 문서가 눈에 안들어와도 이해하고 나면 문서가 눈에 보이고, 오히려 "이런 기능은 없을까?" 하면서 찾게 될 것.

 

[시작]

카카오 개발자 공식 사이트 접속

: https://developers.kakao.com/

 

상단의 '내 애플리케이션' 클릭

 

'애플리케이션 추가하기' 클릭

 

 

'앱 이름', '사업자명', '카테고리' 작성(아이콘은 나중에 필요할 경우 적용)

그리고 '저장' 클릭

 

 

그럼, '앱 설정 - 요약 정보' 란에 네이티브 앱 키 위치를 기억할 것

'앱 설정 - 플랫폼'에서 'Android 플랫폼 등록' 클릭

 

 

 

앱의 패키지명과 마켓 URL '없음'으로 설정한 뒤 '저장' 클릭

: 앱의 패키지명은 'app / build.gradle'에서 android{ } 블럭 내의 namespace에 있다(로그인 API구현할 정도면 이정도 친절은 너무 지나친가..?) 

 

 

'키 해시'값은 여러 방법으로 알 수 있지만, 앱에서 로그를 찍어서 알아내보자

: '키 해시'가 있어야 원활한 Kakao API Server와 통신이 가능하다.

 

 

[안드로이드 앱]

프로젝트 단위의 'settings.gradle'에서 다음과 같이 작성

: maven(url = "https://devrepo.kakao.com/nexus/content/groups/public/")

: 다른 maven을 사용하고 있다면 쫄지말고 밑에 그대로 작성

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven(url = "https://devrepo.kakao.com/nexus/content/groups/public/")
    }
}
allprojects {
    repositories {
        gradlePluginPortal()    // replace jcenter()
        google()
        mavenCentral()
        maven {url('https://jitpack.io')}
        maven {url = "https://devrepo.kakao.com/nexus/content/groups/public/"}
    }
}

 

앱 단위의 build.gradle에서 다음과 같이 작성

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

dependencies {
	...

    // kakao api login
    implementation("com.kakao.sdk:v2-user:2.17.0")
}

 

 

[app / src / AndroidManifest] 에서 다음과 같이 작성

: 그대로 작성할 것, AuthCodeHandlerActivity는 예시로 보여주는 것이 아니라 그대로 작성하라고 있는 것

: android:scheme에서 아까전 네이티브 앱 키값 앞에 "kakao"를 붙여서 넣을 것

: 공식 문서에는 kakao${NATIVE_APP_KEY} 로 되어 있지만, 나처럼 헷갈린 사람도 있지 않을까.

: 그래서, kakak abcdefg 이렇게 예시를 넣어 두었다. ( 붙여 쓸 것 ^^)

        <!--kakao-->
        <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="kakaoabcdefghijklmnopqrstuvwxyz" />
            </intent-filter>
        </activity>

 

 

 

이렇게 기본적인 세팅은 마쳐졌다.

여기까지 기본 세팅은 아래의 링크에 모두 나와있다.

: https://developers.kakao.com/docs/latest/ko/android/getting-started

 

 

나는 "KakaoSdk.init"을 로그인을 하는 액티비티에서 선언해주었다.

메모리를 항상 아끼려는 마음 떄문일까.. 크게 영향은 없겠지만 Kakao에서 알려주는대로 Application을 상속해서 하길 바란다.

 

다음은 나의 'LoginActivity'클래스 안에서의 코드이다.

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        NLog.d("onCreate..")
        setContentView(binding.root)

		...

        KakaoSdk.init(this@LoginActivity, "abcdefghijklmnopqrstuvwxyz")

        // kakao key hash값 확인하는 방법
        NLog.v("kakao keyhash:${Utility.getKeyHash(this@LoginActivity)}")
    }

: KakaoSdk.init 내부 파라메터에 네이티브 앱 키를 넣는다,

: Manifest에서 했던 "kakao"는 붙이지 않은채로 말이다.

 

: Utility.getKeyHash(context)는 '키 해시' 값을 알 수 있다.

: 초반 카카오 개발자 사이트에서 설정할 때 '키 해시'를 누락 했었다.

: 앱을 돌려보고 '키 해시'값이 로그캣에 출력되면 해당 값을 복사하고 카카오 개발자 사이트로 돌아가자

 

 

[카카오 개발자 사이트]

'앱 설정 - 플랫폼'에서 안드로이드 앱에서 복사한 '키 해시' 값을 붙여넣는다.

 

 

 

다시, 안드로이드 앱으로 돌아와서,

(이 부분이 중요하다, 이해하면 쉽고, 회피하면 어렵고)

: 카카오톡으로 로그인을 할 때, 내부에 카카오톡 앱이 설치되어 있는 경우와 아닌 경우를 분별해야한다.

: 카카오톡 앱이 없다면 '카카오 계정' 로그인을 해야하고,

: 카카오톡 앱이 있지만, 로그인이 되어 있지 않은 경우가 있다. 이땐 다시 '카카오 계정'로그인을 하도록 사용자에게 권유해야 한다.

(나도 작성하다보니 카카오 문서보다 어렵게 작성하는 것일까?)

 

먼저, 카카오톡 앱이 설치되어 있는지 확인하는 코드이다.

if (UserApiClient.instance.isKakaoTalkLoginAvailable(this@LoginActivity)) {
	// 카카오톡 앱이 설치되어 있음
} else {
	// 카카오톡 앱 미설치
}

 

 

로그인을 시도했는데 성공한 경우와 실패(또는 취소)한 경우

응답을 받아야 알 수 있다. 아래는 해당 콜백 리스너이다.

private val registerKakaoResultLoginCallback: (OAuthToken?, Throwable?) -> Unit = {token, error ->
    if (error != null) {
        // 로그인 실패
        NLog.e("onKakaoResultCallback.. login fail.. error:${error.message}")

    } else if (token != null) {
        // 로그인 성공
        NLog.d("onKakaoResultCallback.. login success.. token:${token.accessToken}")
    }
}

 

 

 

이제 로그인을 구현한다.

카카오톡이 설치되어 있는 경우 로그인 요청 코드

UserApiClient.instance.loginWithKakaoTalk(this@LoginActivity, callback = registerKakaoResultLoginCallback)

 

카카오 계정 로그인 요청 코드

UserApiClient.instance.loginWithKakaoAccount(this@LoginActivity, callback = registerKakaoResultLoginCallback)

 

 

 

 

여기까지 따라왔다면 그럼 로그인 했는지 안했는지 알 수 없을까

로그아웃은 어떻게 할까 궁금해서 카카오 문서를 보게 될 것이다.

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

 

 

 

 

728x90
반응형

'dev > aos' 카테고리의 다른 글

[AOS] information about setting the namespace.  (0) 2024.03.21
[Kotlin] Map  (0) 2024.03.20
[AOS] PackageInfo #move other app  (0) 2024.02.08
[AOS] RecyclerView  (0) 2024.02.06
[AOS] Timer  (0) 2024.02.06