페이지 이동경로
  • 문서>

Legacy Android

이 문서는 Legacy Kakao SDK for Android(이하 Legacy Android SDK)를 사용한 사용자 관리 구현 방법을 안내합니다.

애플리케이션 설정 확인

이 기능을 사용하려면 애플리케이션 설정에 Android 플랫폼 및 키 해시 등 정보가 등록되어 있어야 합니다. 자세한 내용은 애플리케이션 등록 가이드를 참고합니다.

사용자 정보 가져오기

동의 항목 설정 필요

이 API를 사용하려면 동의 항목 설정을 참고하여 필요한 사용자 정보 동의 항목을 설정해야 합니다.

현재 로그인한 사용자의 정보를 불러옵니다. UserManagementme를 호출해 사용자 정보를 받습니다. 요청 결과를 처리할 MeV2ResponseCallback를 구현하여 전달해야 합니다. propertyKeys 파라미터에 특정 사용자 정보의 키를 문자열 리스트(List)로 지정하여 요청할 수도 있습니다.

Sample: 닉네임, 프로필 이미지 URL 정보 받기
UserManagement.getInstance()
        .me(new MeV2ResponseCallback() {
            @Override
            public void onSessionClosed(ErrorResult errorResult) {
                Log.e("KAKAO_API", "세션이 닫혀 있음: " + errorResult);
            }

            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "사용자 정보 요청 실패: " + errorResult);
            }

            @Override
            public void onSuccess(MeV2Response result) {
                Log.i("KAKAO_API", "사용자 아이디: " + result.getId());

                UserAccount kakaoAccount = result.getKakaoAccount();
                if (kakaoAccount != null) {

                    // 이메일
                    String email = kakaoAccount.getEmail();

                    if (email != null) {
                        Log.i("KAKAO_API", "email: " + email);

                    } else if (kakaoAccount.emailNeedsAgreement() == OptionalBoolean.TRUE) {
                        // 동의 요청 후 이메일 획득 가능
                        // 단, 선택 동의로 설정되어 있다면 서비스 이용 시나리오 상에서 반드시 필요한 경우에만 요청해야 합니다.

                    } else {
                        // 이메일 획득 불가
                    }

                    // 프로필
                    Profile profile = kakaoAccount.getProfile();

                    if (profile != null) {
                        Log.d("KAKAO_API", "nickname: " + profile.getNickname());
                        Log.d("KAKAO_API", "profile image: " + profile.getProfileImageUrl());
                        Log.d("KAKAO_API", "thumbnail image: " + profile.getThumbnailImageUrl());

                    } else if (kakaoAccount.profileNeedsAgreement() == OptionalBoolean.TRUE) {
                        // 동의 요청 후 프로필 정보 획득 가능

                    } else {
                        // 프로필 획득 불가
                    }
                }
            }
        });

예제는 사용자 정보 받기 성공 시 가져온 사용자 정보를 출력하고, 실패 시 에러 메시지를 출력합니다. 사용자 정보의 종류는 이해하기에서 확인할 수 있습니다. 사용자 정보 객체인 MeV2Response에 대한 자세한 정보는 레퍼런스를 참고합니다.

사용자 정보 저장하기

사용자 정보 저장하기 기능은 사용자 프로퍼티(properties)의 값을 저장합니다.

Sample
// 저장하고자 하는 부가정보
//   * 개발자사이트 '사용자 프로퍼티' 설정에서 사용 가능한 프로퍼티 확인 필요
Map<String, String> properties = new HashMap<>();
properties.put("${CUSTOM_PROPERTY_KEY}", "${CUSTOM_PROPERTY_VALUE}");

// 저장 요청
UserManagement.getInstance()
        .requestUpdateProfile(new ApiResponseCallback<Long>() {
            @Override
            public void onSessionClosed(ErrorResult errorResult) {
                Log.e("KAKAO_API", "세션이 닫혀 있음: " + errorResult);
            }

            @Override
            public void onFailure(ErrorResult errorResult) {
                Log.e("KAKAO_API", "사용자 정보 저장 실패: " + errorResult);
            }

            @Override
            public void onSuccess(Long result) {
                Log.i("KAKAO_API", "사용자 정보 저장 성공");
                
                // 이후에 요청하는 사용자 정보 응답에는 변경된 값이 내려옵니다.
            }
        }, properties);

먼저 Map에 저장할 정보의 키와 값을 Map<String, String> 자료형 변수에 담고, 요청 결과를 처리하는 UsermgmtResponseCallback을 구현하여 requestUpdateProfile() API를 호출합니다. 콜백을 통해 성공 또는 실패 응답에 맞는 동작을 합니다.

추가 항목 동의 받기

추가 항목 동의 받기는 사용자가 첫 카카오 로그인 시 동의 화면에서 동의하지 않았지만, 서비스 이용 중 추가로 동의해야 하는 항목을 동의 요청하는 기능입니다. 자세한 기능 설명은 이해하기를 참고합니다.

Legacy Android SDK 사용 시에는 updateScopes API를 사용해 사용자 추가 동의를 받습니다.

예제 코드는 특정 항목에 추가 동의가 필요한지 확인하는 과정과 추가 항목 동의 요청으로 이뤄져 있습니다. 예를 들어, 이메일 정보가 필요할 때 needsScopeAccountEmail의 결과가 "true"라면 이메일 항목을 활용하기 위해 사용자 동의가 필요하다는 의미입니다. 해당 사용자 정보의 키를 추가 동의 받을 항목 리스트에 담습니다.

이어 updateScopes에 추가 동의 받을 항목 리스트를 담아 동의 화면 출력을 요청합니다. 요청 시 전달하는 AccessTokenCallback 콜백에 사용자가 동의 또는 취소하면 각각 알맞는 동작을 구현합니다.

Sample
// 필요한 동의항목의 scope ID (개발자사이트 해당 동의항목 설정에서 확인 가능)
List<String> scopes = Arrays.asList("account_email");

// 사용자 동의 요청
Session.getCurrentSession()
        .updateScopes(this, scopes, new AccessTokenCallback() {
            @Override
            public void onAccessTokenReceived(AccessToken accessToken) {
                Log.i("KAKAO_SESSION", "새로운 동의항목 추가 완료");

                // 요청한 scope이 추가되어 토큰이 재발급 됨

                // TODO: 사용자 동의 획득 이후 프로세스
            }

            @Override
            public void onAccessTokenFailure(ErrorResult errorResult) {
                Log.e("KAKAO_SESSION", "사용자 동의 실패: " + errorResult);
            }
        });

사용자 기기에서 카카오 로그인 시 나타나는 동의 화면과 같은 동의 화면이 나타나고, 요청한 사용자 정보에 대한 제공 동의 항목이 나타난다면 요청에 성공한 것입니다.

더보기