Development record of developer who study hard everyday.

레이블이 안드로이다카카오sdk인 게시물을 표시합니다. 모든 게시물 표시
레이블이 안드로이다카카오sdk인 게시물을 표시합니다. 모든 게시물 표시
, , , ,

안드로이드 카카오 로그인 구현 예제

 안드로이드 카카오 로그인 구현 예제

안드로이드 블로그

에이전시 회사에서 일하는터라 무수히 많이 사용하는 카카오 로그인 sdk이다.

나를 위해서 그리고 또다른 안드로이드 개발자를 위해서 기록해둔다.


1. 카카오 개발자 센터에 앱 등록하기

https://antwhale94.blogspot.com/2022/11/blog-post_14.html

위 링크를 착실히 따라해주길 바란다.


2. 카카오 로그인 sdk 추가하기

dependencies {

//kakao login
implementation "com.kakao.sdk:v2-user:2.11.2"

}

버전의 경우 카카오 개발자센터에서 문서를 통해 확인하자!


3. manifest.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" />

<!-- Redirect URI: "kakao${NATIVE_APP_KEY}://oauth" -->
<data android:host="oauth"
android:scheme="kakaoe3b28431935d1zzz23456923bbfef160cf84619" />
</intent-filter>
</activity>

<application> 태그 안에 적어주면된다.


4. Application 클래스에서 SDK 초기화하기

public class MainApplication extends BaseApplication {

@Override
public void onCreate() {
super.onCreate();
        //카카오 네이티브 키를 통해서 초기화
KakaoSdk.init(this, "e3b28431451935d156823bbfef160cf84619Ekfkgkausqkqh");
}

}

그리고 반드시 manifest.xml에 이 MainApplication 클래스를 추가해주어야한다.

<application
android:name="com.xxxx.xxxx.xxxx.MainApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning"></application>


5.  로그인 코드 작성

-JAVA

private void tryKakaoLogin() {
if (UserApiClient.getInstance().isKakaoTalkLoginAvailable(this)) {
UserApiClient.getInstance().loginWithKakaoAccount(this, (token, error) -> {
if (error != null) {
Log.e(TAG, "카카오톡으로 로그인 실패 " + error);

loginFailureCall("0", error.getMessage(), "K");
// 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
// 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (: 뒤로 가기)
if (error instanceof ClientError && ((ClientError) error).getReason() == ClientErrorCause.Cancelled) {
Log.d(TAG, "카카오톡 로그인 취소");
return null;
}
} else if (token != null) {
Log.i(TAG, "카카오톡으로 로그인 성공 " + token.getAccessToken());

UserApiClient.getInstance().me((user, throwable) -> {
String email = "";
String phone = "";

if (throwable != null) {
Log.e(TAG, "사용자 정보 요청 실패 " + throwable);
} else if (user != null) {
Long id = user.getId();
if(user.getKakaoAccount() != null) {
email = user.getKakaoAccount().getEmail();
phone = user.getKakaoAccount().getPhoneNumber();
}

Log.i(TAG, "카카오 사용자 정보 요청 성공" +
"\n회원번호: " + id +
"\n이메일: " + email +
"\n번호: " + phone);
loginSuccessCall("success", id + "", email, phone, "K");
}
return null;
});
}
return null;
});
} else {
UserApiClient.getInstance().loginWithKakaoAccount(this, (token, error) -> {
if (error != null) {
Log.e(TAG, "카카오계정으로 로그인 실패 " + error);
loginFailureCall("0", error.getMessage(), "K");

// 사용자가 카카오톡 설치 후 디바이스 권한 요청 화면에서 로그인을 취소한 경우,
// 의도적인 로그인 취소로 보고 카카오계정으로 로그인 시도 없이 로그인 취소로 처리 (: 뒤로 가기)
if (error instanceof ClientError && ((ClientError) error).getReason() == ClientErrorCause.Cancelled) {
return null;
}
} else if (token != null) {
Log.i(TAG, "카카오계정으로 로그인 성공 " + token.getAccessToken());
UserApiClient.getInstance().me((user, throwable) -> {
Long id = 0L;
String email = "";
String phone = "";

if (throwable != null) {
Log.e(TAG, "사용자 정보 요청 실패 " + throwable);
} else if (user != null) {
id = user.getId();
if(user.getKakaoAccount() != null) {
email = user.getKakaoAccount().getEmail();
phone = user.getKakaoAccount().getPhoneNumber();
}

Log.i(TAG, "kakao 사용자 정보 요청 성공 " +
"\n회원번호: " + id +
"\n이메일: " + email +
"\n번호: " + phone);
}
loginSuccessCall("success", id + "", email, phone, "K");
return null;
});
}

return null;
});
}
}

-KOTLIN

private fun tryKakaoLogin() {
// 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
if (UserApiClient.instance.isKakaoTalkLoginAvailable(this)) {
UserApiClient.instance.loginWithKakaoTalk(this) { token, error ->
if (error != null) {
Log.e(TAG, "카카오톡으로 로그인 실패", error)

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

} else if (token != null) {
Log.i(TAG, "카카오톡으로 로그인 성공 ${token.accessToken}")
UserApiClient.instance.me { user, error ->
if (error != null) {
Log.e(TAG, "사용자 정보 요청 실패", error)
}
else if (user != null) {
Log.i(TAG, "kakao 사용자 정보 요청 성공" +
"\n회원번호: ${user.id}" +
"\n이메일: ${user.kakaoAccount?.email}" +
"\n번호: ${user.kakaoAccount?.phoneNumber}")
}
loginSuccessCall(id = user?.id.toString(), email = user?.kakaoAccount?.email ?: "",
phone = user?.kakaoAccount?.phoneNumber ?: "", loginType = "K")
}
}
}
} else {
UserApiClient.instance.loginWithKakaoAccount(this) { token, error ->
if (error != null) {
Log.e(TAG, "카카오계정으로 로그인 실패", error)

loginFailureCall("0", error.message ?: "", "K")

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

} else if (token != null) {
Log.i(TAG, "카카오계정으로 로그인 성공 ${token.accessToken}")
UserApiClient.instance.me { user, error ->
if (error != null) {
Log.e(TAG, "사용자 정보 요청 실패", error)
}
else if (user != null) {
Log.i(TAG, "kakao 사용자 정보 요청 성공" +
"\n회원번호: ${user.id}" +
"\n이메일: ${user.kakaoAccount?.email}" +
"\n번호: ${user.kakaoAccount?.phoneNumber}")
}
loginSuccessCall(id = user?.id.toString(), email = user?.kakaoAccount?.email ?: "",
phone = user?.kakaoAccount?.phoneNumber ?: "", loginType = "K")
}
}
}
}
}

로그인을 통해 사용자 정보까지 가져왔을 경우에 logicSuccessCall을 통해 로그인 성공을 알린다.

당연히 여러분은 여러분의 상황에 맞추어 코드를 수정하면 된다.

로그인을 실패했을 경우에는 loginFailureCall을 통해 로그인 실패를 알린다.

이것 역시 여러분의 상황에 맞추어 코드를 수정하면 된다.

그리 어려운 코드가 아니니까 차근차근 따라해보길 바란다!!




Share:
Read More