페이지 이동경로
  • 문서>
  • 카카오톡 소셜>
  • Android

카카오톡 소셜

Android

이 문서는 Kakao SDK for Android(이하 Android SDK)를 사용한 카카오톡 소셜 API 구현 방법을 안내합니다.

시작하기 전에

모듈 설정

카카오톡 소셜 API는 카카오톡 모듈의 TalkApiClient가 제공합니다. 피커의 경우, PickerClient가 제공합니다. 모듈 설정을 참고하여 build.gradle.kts(Module) 파일에 카카오 로그인 모듈인 v2-user, 카카오톡 모듈인 v2-talk을 추가합니다. 피커 사용 시에는 친구 피커 UI에 대한 리소스 번들을 포함한 v2-friend 모듈을 추가로 설치해야 합니다.

프로필 가져오기

기본 정보
권한 사전 설정 카카오 로그인 사용자 동의 레퍼런스
- 플랫폼 등록
카카오 로그인 활성화
동의항목
필요 필요:
프로필 정보(닉네임/프로필 사진)
닉네임
프로필 사진
공통
TalkProfile
Android SDK
profile()
ReactiveX Android SDK
profile()

현재 로그인한 사용자의 카카오톡 프로필 정보를 받습니다. TalkApiClientprofile() API를 호출합니다.

Kotlin
RxKotlin
// 카카오톡 프로필 가져오기
TalkApiClient.instance.profile { profile, error ->
    if (error != null) {
        Log.e(TAG, "카카오톡 프로필 가져오기 실패", error)
    }
    else if (profile != null) {
        Log.i(TAG, "카카오톡 프로필 가져오기 성공" +
                "\n닉네임: ${profile.nickname}" +
                "\n프로필사진: ${profile.thumbnailUrl}")
    }
}
var disposables = CompositeDisposable()

// 카카오톡 프로필 가져오기
TalkApiClient.rx.profile()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ profile ->
        Log.i(TAG, "카카오톡 프로필 가져오기 성공" +
                "\n닉네임: ${profile.nickname}" +
                "\n프로필사진: ${profile.thumbnailUrl}") 
    }, { error ->
        Log.e(TAG, "카카오톡 프로필 가져오기 실패", error)
    }).addTo(disposables)

요청이 성공하면 TalkProfile 객체로 카카오톡 프로필 정보를 받습니다. 카카오톡 프로필 정보의 구성에 대해서는 REST API 가이드를 함께 참고합니다.

피커: 친구 선택하기

기본 정보
권한 사전 설정 카카오 로그인 사용자 동의 레퍼런스
필요:
사용 권한
플랫폼 등록
카카오 로그인 활성화
동의항목
필요 필요:
카카오 서비스 내 친구목록(프로필사진, 닉네임, 즐겨찾기 포함)
Android SDK
selectFriend()
selectFriendPopup()
selectFriends()
selectFriendsPopup()
ReactiveX Android SDKselectFriend()
selectFriendPopup()
selectFriends()
selectFriendsPopup()

사용자가 카카오톡 친구를 선택할 수 있는 피커를 호출합니다. 선택 유형과 화면 표시 형태에 따라 호출해야 할 메서드가 다르므로, 다음 중 서비스의 필요에 맞는 메서드를 선택해 사용합니다.

선택 유형 화면 표시 형태 메서드
싱글 피커 풀 스크린 selectFriend()
싱글 피커 팝업 selectFriendPopup()
멀티 피커 풀 스크린 selectFriends()
멀티 피커 팝업 selectFriendsPopup()

피커의 구성 요소, 언어는 파라미터를 사용해 선택적으로 지정할 수 있습니다. 아래 표를 참고합니다.

파라미터
이름 타입 설명 필수
title String 친구 피커의 타이틀 영역에 표시될 텍스트
(기본값: "친구 선택")
X
viewAppearance ViewAppearance 친구 피커 화면 모드

다음 중 하나:
LIGHT: 라이트 모드
DARK: 다크 모드
AUTO: 시스템 디스플레이 설정에 따라 라이트 또는 다크 모드로 자동 전환
(기본값: AUTO)
X
orientation PickerOrientation 친구 피커의 방향

다음 중 하나:
PORTRAIT: 세로 모드
LANDSCAPE: 가로 모드
AUTO: 시스템 설정에 따라 세로 또는 가로 모드로 자동 전환
(기본값: AUTO)
X
enableSearch Boolean 친구 검색 기능 사용 여부
(기본값: true)
X
enableIndex Boolean 친구 목록 인덱스뷰 사용 여부
(기본값: true)
X
showMyProfile Boolean 내 프로필 표시 여부
true일 경우 자신의 프로필도 선택 가능
(기본값: true)
X
showFavorite Boolean 즐겨찾기 친구 표시 여부
(기본값: true)
X
showPickedFriend Boolean 멀티 피커 전용
선택한 친구 표시 여부
(기본값: true)
X
maxPickableCount Int 멀티 피커 전용
선택 가능한 친구 수의 최대 값
minPickableCount 보다 크거나 같은 수
(기본값: 30, 최대: 100)
X
minPickableCount Int 멀티 피커 전용
선택 가능한 친구 수의 최소 값
maxPickableCount 보다 작거나 같은 수
(기본값: 1, 최대: 100)
X
예제
예제: 풀 스크린 형태로 싱글 피커 출력
Kotlin
RxKotlin
// 파라미터 설정
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
    title = "풀 스크린 싱글 친구 피커", //default "친구 선택"
    viewAppearance = ViewAppearance.AUTO, //default ViewAppearance.AUTO
    orientation = PickerOrientation.AUTO, //default PickerOrientation.AUTO
    enableSearch = true, //default true
    enableIndex = true, //default true
    showMyProfile = true, //default true
    showFavorite = true //default true
)

// 피커 호출
PickerClient.instance.selectFriend(
    context = context!!,
    params = openPickerFriendRequestParams
) { selectedUsers, error ->
    if (error != null) {
        Log.e(TAG, "친구 선택 실패", error)
    } else {
        Log.d(TAG, "친구 선택 성공 $selectedUsers")
    }
}
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
    title = "풀 스크린 싱글 친구 피커", //default "친구 선택"
    viewAppearance = ViewAppearance.AUTO, //default ViewAppearance.AUTO
    orientation = PickerOrientation.AUTO, //default PickerOrientation.AUTO
    enableSearch = true, //default true
    enableIndex = true, //default true
    showMyProfile = true, //default true
    showFavorite = true //default true
)

PickerClient.rx.selectFriend(
    context = context!!,
    params = openPickerFriendRequestParams
).subscribe({ selectedUsers ->
    Log.d(TAG, "친구 선택 성공 $selectedUsers")
}, { error ->
    Log.e(TAG, "친구 선택 실패", error)
}).addTo(disposables)
예제: 팝업 형태로 싱글 피커 출력
Kotlin
RxKotlin
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
    title = "팝업 싱글 친구 피커", //default "친구 선택"
    viewAppearance = ViewAppearance.AUTO, //default ViewAppearance.AUTO
    orientation = PickerOrientation.AUTO, //default PickerOrientation.AUTO
    enableSearch = true, //default true
    enableIndex = true, //default true
    showMyProfile = true, //default true
    showFavorite = true //default true
)

PickerClient.instance.selectFriendPopup(
    context = context!!,
    params = openPickerFriendRequestParams
) { selectedUsers, error ->
    if (error != null) {
        Log.e(TAG, "친구 선택 실패", error)
    } else {
        Log.d(TAG, "친구 선택 성공 $selectedUsers")
    }
}
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
    title = "팝업 싱글 친구 피커", //default "친구 선택"
    viewAppearance = ViewAppearance.AUTO, //default ViewAppearance.AUTO
    orientation = PickerOrientation.AUTO, //default PickerOrientation.AUTO
    enableSearch = true, //default true
    enableIndex = true, //default true
    showMyProfile = true, //default true
    showFavorite = true //default true
)

PickerClient.rx.selectFriendPopup(
    context = context!!,
    params = openPickerFriendRequestParams
).subscribe({ selectedUsers ->
    Log.d(TAG, "친구 선택 성공 $selectedUsers")
}, { error ->
    Log.e(TAG, "친구 선택 실패", error)
}).addTo(disposables)
예제: 풀 스크린 형태로 멀티 피커 출력
Kotlin
RxKotlin
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
    title = "풀 스크린 멀티 친구 피커", //default "친구 선택"
    viewAppearance = ViewAppearance.AUTO, //default ViewAppearance.AUTO
    orientation = PickerOrientation.AUTO, //default PickerOrientation.AUTO
    enableSearch = true, //default true
    enableIndex = true, //default true
    showMyProfile = true, //default true
    showFavorite = true, //default true
    showPickedFriend = null, // default true
    maxPickableCount = null, // default 30
    minPickableCount = null // default 1
)

PickerClient.instance.selectFriends(
    context = context!!,
    params = openPickerFriendRequestParams
) { selectedUsers, error ->
    if (error != null) {
        Log.e(TAG, "친구 선택 실패", error)
    } else {
        Log.d(TAG, "친구 선택 성공 $selectedUsers")
    }
}
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
    title = "풀 스크린 멀티 친구 피커", //default "친구 선택"
    viewAppearance = ViewAppearance.AUTO, //default ViewAppearance.AUTO
    orientation = PickerOrientation.AUTO, //default PickerOrientation.AUTO
    enableSearch = true, //default true
    enableIndex = true, //default true
    showMyProfile = true, //default true
    showFavorite = true, //default true
    showPickedFriend = null, // default true
    maxPickableCount = null, // default 30
    minPickableCount = null // default 1
)

PickerClient.rx.selectFriends(
    context = context!!,
    params = openPickerFriendRequestParams
).subscribe({ selectedUsers ->
    Log.d(TAG, "친구 선택 성공 $selectedUsers")
}, { error ->
    Log.e(TAG, "친구 선택 실패", error)
}).addTo(disposables)
예제: 팝업 형태로 멀티 피커 출력
Kotlin
RxKotlin
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
    title = "팝업 멀티 친구 피커", //default "친구 선택"
    viewAppearance = ViewAppearance.AUTO, //default ViewAppearance.AUTO
    orientation = PickerOrientation.AUTO, //default PickerOrientation.AUTO
    enableSearch = true, //default true
    enableIndex = true, //default true
    showMyProfile = true, //default true
    showFavorite = true, //default true
    showPickedFriend = null, // default true
    maxPickableCount = null, // default 30
    minPickableCount = null // default 1
)

PickerClient.instance.selectFriendsPopup(
    context = context!!,
    params = openPickerFriendRequestParams
) { selectedUsers, error ->
    if (error != null) {
        Log.e(TAG, "친구 선택 실패", error)
    } else {
        Log.d(TAG, "친구 선택 성공 $selectedUsers")
    }
}
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
    title = "팝업 멀티 친구 피커", //default "친구 선택"
    viewAppearance = ViewAppearance.AUTO, //default ViewAppearance.AUTO
    orientation = PickerOrientation.AUTO, //default PickerOrientation.AUTO
    enableSearch = true, //default true
    enableIndex = true, //default true
    showMyProfile = true, //default true
    showFavorite = true, //default true
    showPickedFriend = null, // default true
    maxPickableCount = null, // default 30
    minPickableCount = null // default 1
)

PickerClient.rx.selectFriendsPopup(
    context = context!!,
    params = openPickerFriendRequestParams
).subscribe({ selectedUsers ->
    Log.d(TAG, "친구 선택 성공 $selectedUsers")
}, { error ->
    Log.e(TAG, "친구 선택 실패", error)
}).addTo(disposables)

사용자가 피커 화면에서 친구 선택을 완료하면 SelectedUsers 객체가 반환됩니다. 해당 객체는 선택된 각 친구의 정보를 SelectedUser 객체의 배열로 포함합니다. 요청에 실패했거나 문제가 발생한 경우 문제 해결에서 원인을 확인합니다.

SelectedUsers
이름 타입 설명 필수
totalCount Int 친구 피커에서 사용자가 선택한 친구 수
선택한 친구 정보 목록의 친구 수와 다를 수 있음

참고: 피커를 통해 제공받은 친구 정보의 수가 선택한 친구 수보다 적은 경우
O
users List<SelectedUser> 선택한 친구 정보 목록 X
SelectedUser
이름 타입 설명 필수
uuid String 친구마다 고유한 값을 가지는 참고용 코드(Code)
카카오톡 메시지 전송 시 사용

참고: 카카오톡을 탈퇴하거나 새로 가입할 경우 값이 변경될 수 있음
O
id Long 친구의 회원번호 X
profileNickname String 카카오톡 프로필 닉네임 X
profileThumbnailImage String 카카오톡 프로필 썸네일 이미지 X
favorite Boolean 즐겨찾기 설정 여부 X

친구 목록 가져오기

기본 정보
권한 사전 설정 카카오 로그인 사용자 동의 레퍼런스
필요:
사용 권한
플랫폼 등록
카카오 로그인 활성화
동의항목
필요 필요:
카카오 서비스 내 친구목록
(프로필사진, 닉네임, 즐겨찾기 포함)
공통
Friends
Android SDK
friends()
ReactiveX Android SDK
friends()

현재 로그인한 사용자의 카카오톡 친구 목록을 불러옵니다. TalkApiClientfriends() API를 호출합니다. 요청 시 친구 목록의 정렬 순서, 한 페이지당 친구 수를 선택적으로 지정할 수 있습니다. 파라미터 없이 요청 시 기본 설정대로 요청이 전송됩니다.

Kotlin
RxKotlin
// 카카오톡 친구 목록 가져오기 (기본)
TalkApiClient.instance.friends { friends, error ->
    if (error != null) {
        Log.e(TAG, "카카오톡 친구 목록 가져오기 실패", error)
    }
    else if (friends != null) {
        Log.i(TAG, "카카오톡 친구 목록 가져오기 성공 \n${friends.elements.joinToString("\n")}")

        // 친구의 UUID 로 메시지 보내기 가능
    }
}
var disposables = CompositeDisposable()

// 카카오톡 친구 목록 가져오기 (기본)
TalkApiClient.rx.friends()
    .retryWhen(
        // InsufficientScope 에러에 대해 추가 동의 후 재요청
        RxAuthOperations.instance.incrementalAuthorizationRequired(context)
    )
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ friends ->
        Log.i(TAG, "카카오톡 친구 목록 가져오기 성공 \n${friends.elements.joinToString("\n")}")

        // 친구의 UUID 로 메시지 보내기 가능
    }, { error ->
        Log.e(TAG, "카카오톡 친구 목록 가져오기 실패", error)
    })
    .addTo(disposables)

요청 성공 시 Friends 객체를 응답으로 받습니다. Friends 객체는 각 친구의 정보를 담은 Friend 객체의 리스트(List)로 구성되어 있습니다. 자세한 카카오톡 친구 정보 구성에 대해서는 REST API를 함께 참고합니다.

만약 사용자가 카카오톡 친구 목록 제공에 동의하지 않아 요청이 실패한 경우, 다음 내용을 참고해 사용자 동의를 받은 후 다시 요청합니다.

  • 동의항목에 [카카오 서비스 내 친구목록]을 사용하도록 설정했는지 확인합니다.
  • 추가 항목 동의 받기를 사용해 '카카오 서비스 내 친구목록'의 사용자 동의를 받습니다.

더 보기