이 문서는 Kakao SDK for Android(이하 Android SDK)를 사용한 카카오톡 소셜 API 구현 방법을 안내합니다.
카카오톡 소셜 API는 카카오톡 모듈의 TalkApiClient
가 제공합니다. 피커의 경우, PickerClient
가 제공합니다. 모듈 설정을 참고하여 build.gradle(Module) 파일에 카카오 로그인 모듈인 v2-user
, 카카오톡 모듈인 v2-talk
을 추가합니다. 피커 사용 시에는 친구 피커 UI에 대한 리소스 번들을 포함한 v2-friend
모듈을 추가로 설치해야 합니다.
권한 | 사전 설정 | 카카오 로그인 | 사용자 동의 | 레퍼런스 |
---|---|---|---|---|
- | 플랫폼 등록 카카오 로그인 활성화 동의 항목 |
필요 | 필요: 프로필 정보(닉네임/프로필 사진) 닉네임 프로필 사진 |
공통TalkProfile Android SDK profile() ReactiveX Android SDK profile() |
현재 로그인한 사용자의 카카오톡 프로필 정보를 받습니다. TalkApiClient
의 profile()
API를 호출합니다.
// 카카오톡 프로필 가져오기
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 가이드를 함께 참고합니다.
권한 | 사전 설정 | 카카오 로그인 | 사용자 동의 |
---|---|---|---|
필요: 사용 권한 |
플랫폼 등록 카카오 로그인 활성화 동의 항목 |
필요 | 필요: 카카오 서비스 내 친구목록(프로필사진, 닉네임, 즐겨찾기 포함) |
사용자가 카카오톡 친구를 선택할 수 있는 피커를 호출합니다. 선택 유형과 화면 표시 형태에 따라 호출해야 할 메서드가 다르므로, 다음 중 서비스의 필요에 맞는 메서드를 선택해 사용합니다.
선택 유형 | 화면 표시 형태 | 메서드 |
---|---|---|
싱글 피커 | 풀 스크린 | 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 |
// 파라미터 설정
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)
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)
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)
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
객체의 배열로 포함합니다. 요청에 실패했거나 문제가 발생한 경우 문제 해결에서 원인을 확인합니다.
이름 | 타입 | 설명 | 필수 |
---|---|---|---|
totalCount | Int |
친구 피커에서 사용자가 선택한 친구 수 선택한 친구 정보 목록의 친구 수와 다를 수 있음 참고: 피커를 통해 제공받은 친구 정보의 수가 선택한 친구 수보다 적은 경우 |
O |
users | List<SelectedUser> |
선택한 친구 정보 목록 | X |
이름 | 타입 | 설명 | 필수 |
---|---|---|---|
uuid | String |
친구마다 고유한 값을 가지는 참고용 코드(Code) 카카오톡 메시지 전송 시 사용 참고: 카카오톡을 탈퇴하거나 새로 가입할 경우 값이 변경될 수 있음 |
O |
id | Long |
친구의 회원번호 | X |
profileNickname | String |
카카오톡 프로필 닉네임 | X |
profileThumbnailImage | String |
카카오톡 프로필 썸네일 이미지 | X |
favorite | Boolean |
즐겨찾기 설정 여부 | X |
권한 | 사전 설정 | 카카오 로그인 | 사용자 동의 | 레퍼런스 |
---|---|---|---|---|
필요: 사용 권한 |
플랫폼 등록 카카오 로그인 활성화 동의 항목 |
필요 | 필요: 카카오 서비스 내 친구목록 (프로필사진, 닉네임, 즐겨찾기 포함) |
공통Friends Android SDK friends() ReactiveX Android SDK friends() |
현재 로그인한 사용자의 카카오톡 친구 목록을 불러옵니다. TalkApiClient
의 friends()
API를 호출합니다. 요청 시 친구 목록의 정렬 순서, 한 페이지당 친구 수를 선택적으로 지정할 수 있습니다. 파라미터 없이 요청 시 기본 설정대로 요청이 전송됩니다.
// 카카오톡 친구 목록 가져오기 (기본)
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를 함께 참고합니다.
만약 사용자가 카카오톡 친구 목록 제공에 동의하지 않아 요청이 실패한 경우, 다음 내용을 참고해 사용자 동의를 받은 후 다시 요청합니다.