-
카카오 로그인앱 만들기/앱 학습 자료들 정리 2023. 6. 3. 00:22
구글 로그인에 이어서 카카오 로그인도 추가 시켜줄 예정이다.
먼저 해야 할 일은 카카오 개발자 사이트에서 앱 등록을 하는 것이다.
카카오 개발자 사이트
1. 카카오 개발자 사이트 세팅
a) '내 애플리케이션' 에서 애플리케이션 추가
b) 플래폼에서 안드로이드 등록 : 일단 두번째 (마켓 URL) 는 비어놓고 세번째 (키 해시)는 Kakao SDK로 디버그, 릴리즈 키 해시 확인 (아래 코드부분에 추가)
c) 동의 항목 설정 (내 애플리케이션>제품 설정>카카오 로그인>동의항목)
저는 닉네임과 카카오 계정 정보만 사용할 것이기 때문에 이 2가지만 설정
2. 코드부분
a) settings.gradle
pluginManagement { repositories { google() mavenCentral() maven { url 'https://jitpack.io' } gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' } } } rootProject.name = "Android_Study_App" include ':app'
아랫 부분을 추가!
maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }
b) build.gradle
dependencies { implementation "com.kakao.sdk:v2-all:2.14.0" // 전체 모듈 설치, 2.11.0 버전부터 지원 implementation "com.kakao.sdk:v2-user:2.14.0" // 카카오 로그인 implementation "com.kakao.sdk:v2-talk:2.14.0" // 친구, 메시지(카카오톡) implementation "com.kakao.sdk:v2-story:2.14.0" // 카카오스토리 implementation "com.kakao.sdk:v2-share:2.14.0" // 메시지(카카오톡 공유) implementation "com.kakao.sdk:v2-navi:2.14.0" // 카카오내비 implementation "com.kakao.sdk:v2-friend:2.14.0" // 카카오톡 소셜 피커, 리소스 번들 파일 포함 }
모두든것 사용하려면 '~~~ all:2.14.0' 맨 위에꺼만 추가 하면 되는듯. 하지만 저는 로그인부분 할것이기 때문에 아랫것만 추가!
implementation "com.kakao.sdk:v2-user:2.14.0" // 카카오 로그인
위에서 릴리즈 키해시 얻어야 하는 부분이 있었는데 아래처럼 얻으면 된다고 한다. 저는 로그로 찍어서 체크했습니다.
더보기Kakao SDK로 디버그, 릴리즈 키 해시 확인
Kakao SDK를 통해서도 키 해시 확인이 가능합니다. Utility에서 제공하는 편의 기능 중 getKeyHash() 함수를 사용하여 키 해시 값을 문자열(String)로 구할 수 있습니다.
import com.kakao.sdk.common.util.Utility var keyHash = Utility.getKeyHash(this)
C) AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Android_Study_App" android:usesCleartextTraffic="true" tools:targetApi="31"> ... 생략 ... <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" /> <!-- Redirect URI: "kakao${NATIVE_APP_KEY}://oauth" --> <data android:host="oauth" android:scheme="kakao${NATIVE_APP_KEY}" /> </intent-filter> </activity> ... 생략 ... </application> </manifest>
- Internet permission 부분
- 인가 코드를 받을 redirect activity 추가
'NATIVE_APP_KEY'는 (카카오 개발자 사이트 > 내 애플리케이션 > 요약정보) 에서 찾을수 있습니다.
d) activity_login.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=".LoginActivity"> ... 생략 ... <ImageView android:id="@+id/kakaoLoginBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/googleLoginBtn" app:srcCompat="@drawable/kakao_login_medium_narrow" /> ... 생략 ... </androidx.constraintlayout.widget.ConstraintLayout>
카카오 버튼 이미지 다운 경로 : https://developers.kakao.com/tool/resource/login
e) LoginActivity.kt
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityLoginBinding.inflate(layoutInflater) setContentView(binding.root) ... 생략 ... var keyHash = Utility.getKeyHash(this) Log.d("keyHash", keyHash) KakaoSdk.init(this, "2957032b6766b3e400416921fc09a7ea") binding.kakaoLoginBtn.setOnClickListener { // 카카오톡으로 로그인 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(this)) { UserApiClient.instance.loginWithKakaoTalk(this) { token, error -> if (error != null) { Log.e(TAG, "카카오톡으로 로그인 실패", error) Toast.makeText(this, "카카오 로그인이 실패.", Toast.LENGTH_SHORT).show() // 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우, // 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (예: 뒤로 가기) if (error is ClientError && error.reason == ClientErrorCause.Cancelled) { return@loginWithKakaoTalk } // 카카오톡에 연결된 카카오계정이 없는 경우, 카카오계정으로 로그인 시도 UserApiClient.instance.loginWithKakaoAccount(this, callback = callback) } else if (token != null) { Log.i(TAG, "카카오톡으로 로그인 성공 ${token.accessToken}") Toast.makeText(this, "카카오 로그인이 되어있습니다1.", Toast.LENGTH_SHORT).show() } } } else { UserApiClient.instance.loginWithKakaoAccount(this, callback = callback) Toast.makeText(this, "카카오 로그인이 되어있습니다2.", Toast.LENGTH_SHORT).show() } } ... 생략 ... }
카카오 로그인 관련 코드들 :
https://developers.kakao.com/docs/latest/ko/kakaologin/android#req-user-info
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
여러가지중 4가지만 가져왔습니다.
카카오 로그인 구현 예제
더보기// 로그인 조합 예제 // 카카오계정으로 로그인 공통 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) }
토큰 존재 여부 확인하기
더보기if (AuthApiClient.instance.hasToken()) { UserApiClient.instance.accessTokenInfo { _, error -> if (error != null) { if (error is KakaoSdkError && error.isInvalidTokenError() == true) { //로그인 필요 } else { //기타 에러 } } else { //토큰 유효성 체크 성공(필요 시 토큰 갱신됨) } } } else { //로그인 필요 }
로그아웃
더보기// 로그아웃 UserApiClient.instance.logout { error -> if (error != null) { Log.e(TAG, "로그아웃 실패. SDK에서 토큰 삭제됨", error) } else { Log.i(TAG, "로그아웃 성공. SDK에서 토큰 삭제됨") } }
사용자 정보 가져오기
더보기// 사용자 정보 요청 (기본) UserApiClient.instance.me { user, error -> if (error != null) { Log.e(TAG, "사용자 정보 요청 실패", error) } else if (user != null) { Log.i(TAG, "사용자 정보 요청 성공" + "\n회원번호: ${user.id}" + "\n이메일: ${user.kakaoAccount?.email}" + "\n닉네임: ${user.kakaoAccount?.profile?.nickname}" + "\n프로필사진: ${user.kakaoAccount?.profile?.thumbnailImageUrl}") } }
'앱 만들기 > 앱 학습 자료들 정리' 카테고리의 다른 글
구글 로그인과 Firebase (0) 2023.06.03 프로젝트 README.md (0) 2023.05.29