[Android/SDK연동]SNS 로그인 구현(6) - 카카오톡 로그인 SDK V2

2021. 5. 14. 15:47Android/튜토리얼 및 가이드

728x90
반응형

* 이전 버전으로 카카오톡에 로그인을 수행하는 기술은 아래 게시글을 참고하여 주세요.

2021.05.11 - [Android Studio/JAVA]SNS 로그인 구현(2) - 카카오톡 sdk v1

 

1. AndroidManifest.xml에 아래 코드를 입력하여 Redirect URI 설정합니다.

<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>

* 카카오 로그인 기능을 구현하기 위해서는 리다이렉션(Redirection)을 통해 인가 코드를 받아야 합니다.

 

2. 카카오 sdk2 로그인을 사용하기 위하여 build.gradle(:app) dependcies에 추가해줍니다.

implementation "com.kakao.sdk:v2-user:2.5.0" // 카카오 로그인 sdk v2
repositories {
  maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }
}

 

3. 로그인을 실행할 부분에 아래 코드를 작성해주세요.

if (UserApiClient.getInstance().isKakaoTalkLoginAvailable(mContext)) {
	// 카카오톡이 설치되어 있을 경우
	UserApiClient.getInstance().loginWithKakaoTalk(MainActivity.this, kakaoCallback);
} else {
	// 카카오톡이 설치되어있지 않은 경우
	UserApiClient.getInstance().loginWithKakaoAccount(MainActivity.this, kakaoCallback);
}

* SDK V2는 카카오톡이 있으면 카카오톡으로 로그인이 되고, 없으면 웹페이지로 로그인이 됩니다.

* 여기서 kakaoCallback을 실행시킨다.

 

4. 토큰값을 얻어와 로그인 여부를 따지고, 카카오 프로필 정보를 얻어오는 getKakaoProfile() 메서드를 실행한다.

Function2<OAuthToken, Throwable, Unit> kakaoCallback = (oAuthToken, throwable) -> {
	if (oAuthToken != null) {
		Log.e("TAG", "로그인 성공");
	}
	if (throwable != null) {
		Log.e("TAG", "로그인 실패", throwable);
		Log.d("TAG", "Message : " + throwable.getLocalizedMessage());
	}
	getKaKaoProfile();
	return null;
};

 

5. 로그인 계정 정보를 받아온다.

private void getKaKaoProfile() {
	UserApiClient.getInstance().me((user, throwable) -> {
		if (user != null) {
			login_name = user.getKakaoAccount().getProfile().getNickname();
			Log.d("TAG", "Kakao id =" + login_name);
			txtLoginState.setText("카카오톡 : " + login_name);
			Toast.makeText(mContext,"환영합니다!", Toast.LENGTH_LONG).show();
		} else {
			Toast.makeText(mContext,"계정 정보 없음!", Toast.LENGTH_LONG).show();
		}
		if (throwable != null) {
			Log.d("TAG", "invoke: " + throwable.getLocalizedMessage());
		}
		return null;
	});
}
728x90
반응형