Android Java로 구성한 프로젝트에 Kakao Login V2를 적용하려고 보니 Kotlin 연동만 제공을 하고 있었다.
Java로 구성된 프로젝트에는 그럼 어떻게 적용을 하여야 하는가??
적용 방법을 아래와 같이 정리한다.
1. Android Java Project에 Kotlin을 사용할 수 있도록 연동한다.
- 프로젝트 단위 build.gradle 파일안에 아래 붉은 내용을 추가한다.
buildscript {
repositories {
// kotlin
mavenCentral()
// ... 아래 생략 ...
}
dependencies {
// kotlin
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.21'
// ... 아래 생략 ...
}
}
allprojects {
repositories {
// kotlin
mavenCentral()
// ... 아래 생략 ...
}
}
2. Project에 Kakao SDK를 연동한다.
- 앱 단위 build.gradle 파일안에 아래 붉은 내용을 추가한다.
dependencies {
// 카카오로그인
implementation "com.kakao.sdk:v2-user:2.4.1"
}
- AndroidManifest.xml 파일안 kakao Activity를 정의해 준다.
여기에서 kakao{NATIVE_APP_KEY} 이 부분에 Developer kakao 에서 발급 받은 키 값을 넣어준다.
Ex) key 값이 1234 라고 가정할때 kakao1234 가 된다. 대괄호({}) 는 제외하고 작성한다.
<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" />
<!-- Redirect URI: "kakao{NATIVE_APP_KEY}://oauth“ -->
<data android:host="oauth"
android:scheme="kakao{NATIVE_APP_KEY}" />
</intent-filter>
</activity>
참고] 위 AndroidManifest.xml 파일에 정의하는 코드는 Kakao 앱 또는 앱 내장 브라우저 인증 방식으로 카카오 계정 로그인 후 다시 앱으로 돌아올때 사용되는 부분으로 해당 코드가 누락될 경우 로그인 후 앱으로 돌아지 않게 된다.
3. Application 파일에 Kakao SDK 초기화 하기
- 정의한 Application 파일 onCreate에 아래 코드 정의
KakaoSdk.init(this, "<Kakao Native App Key>");
4. 자체적으로 구성한 카카오 로그인 버튼 클릭 시
- 먼저 카카오톡 설치 여부 확인 후 카카오톡으로 인증할지 웹뷰 방식의 카카오계정으로 인증할지 선택한다.
// 카카오톡 설치 여부 확인
if (UserApiClient.getInstance().isKakaoTalkLoginAvailable(this)) {
// 카카오톡이 설치되어 있으면 카톡으로 로그인 확인 요청
UserApiClient.getInstance().loginWithKakaoTalk(this, (token, loginError) -> {
if (loginError != null) {
// 로그인 실패
} else {
// 로그인 성공
// 사용자 정보 요청
requestMe();
}
return null;
});
} else {
// 카카오톡이 설치되어 있지 않은 경우 앱 내장 웹뷰 방식으로 카카오계정 확인 요청
UserApiClient.getInstance().loginWithKakaoAccount(this, (token, loginError) -> {
if (loginError != null) {
// 로그인 실패
} else {
// 로그인 성공
// 사용자 정보 요청
requestMe();
}
return null;
});
}
- 사용자 정보 요청 및 확인 함수
// 사용자 정보 요청
private void requestMe() {
// 사용자 정보 요청
UserApiClient.getInstance().me((user, meError) -> {
if (meError != null) {
DLG.e("사용자 정보 요청 실패 " + meError);
} else {
// 사용자 아이디: user.getId());
Account kakaoAccount = user.getKakaoAccount();
if (kakaoAccount != null) {
// 프로필
Profile profile = kakaoAccount.getProfile();
if (profile != null) {
// nickname: profile.getNickname()
// profile image: profile.getProfileImageUrl()
// thumbnail image: profile.getThumbnailImageUrl()
// 이메일
String email = kakaoAccount.getEmail();
if (email != null) {
// 이메일 획득 가능
} else if (kakaoAccount.getEmailNeedsAgreement()) {
// 동의 요청 후 이메일 획득 가능
// 단, 선택 동의로 설정되어 있다면 서비스 이용 시나리오 상에서 반드시 필요한 경우에만 요청해야 합니다.
// 필요한 동의항목의 scope ID (개발자사이트 해당 동의항목 설정에서 확인 가능)
List<String> scopes = Arrays.asList("account_email");
// 사용자 동의 요청
UserApiClient.getInstance().loginWithNewScopes(this, scopes, (ttt, error) -> {
if (error != null) {
requestMe();
} else {
}
return null;
});
} else {
// 이메일 획득 불가
} else {
// 이메일 획득 불가
}
}
}
return null;
});
}
5. 로그아웃 처리
UserApiClient.getInstance().logout(error -> {
return null;
});
6. 연결 끊기 - 연결 끊기는 초기 로그인 시 받았던 권한 요청 및 관련 데이터를 초기화 하여 연결 끊기 후 다시 로그인 시 권한 요청을 다시 하게 된다.
UserApiClient.getInstance().unlink(error -> {
return null;
});
위 코드를 참고하여 로그인 처리가 가능하다 다만 카카오톡에서는 토큰정보를 활용하여 로그인 상태처리를 진행하도록 추가 함수들을 제공하고 있으니 아래 문서를 확인해 보는것도 좋겠다.
'개발' 카테고리의 다른 글
iOS 13 이후 위치 권한을 항상 받도록 설정하는 방법은? (0) | 2021.04.01 |
---|---|
Swift 위치 권한 팝업 요청 및 단말기 현재 위치 가져오기 (0) | 2021.04.01 |
iOS 14.5 부터 변경될 IDFA 수집에 관한 정책 정리 (0) | 2021.03.16 |
Swift TextField 엔터키 이벤트 수신하는 방법! (0) | 2021.02.16 |
Xcode 에서 특정 문자열 한번에 고치는 방법 (0) | 2021.02.09 |