이 문서는 Android SDK(Kakao SDK for Android)를 사용한 카카오톡 소셜 API 구현 방법을 안내합니다.
레퍼런스 | 앱 설정 |
---|---|
[SDK, RxSDK] profile() [SDK] TalkProfile |
설치 초기화 |
권한 | 사전 설정 | 카카오 로그인 | 동의항목 |
---|---|---|---|
- | 플랫폼 등록 카카오 로그인 활성화 동의항목 |
필요 | 필요: 프로필 정보(닉네임/프로필 사진) 닉네임 프로필 사진 |
현재 로그인한 사용자의 카카오톡 프로필 정보를 받습니다.
TalkApiClient
의 profile()
API를 호출합니다.
요청이 성공하면 TalkProfile
객체로 카카오톡 프로필 정보를 받습니다. 카카오톡 프로필 정보의 구성은 REST 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)
레퍼런스 | 앱 설정 |
---|---|
[SDK, RxSDK] selectFriend() [SDK] OpenPickerFriendRequestParams |
설치 초기화 |
권한 | 사전 설정 | 카카오 로그인 | 동의항목 |
---|---|---|---|
필요: 사용 권한 |
플랫폼 등록 카카오 로그인 활성화 동의항목 |
필요 | 필요: 카카오 서비스 내 친구목록(프로필사진, 닉네임, 즐겨찾기 포함) |
친구 피커를 띄우고, 사용자가 선택한 카카오톡 친구 정보를 전달합니다.
selectFriend()
호출 시, 함께 전달하는 파라미터에 따라 친구 피커의 화면 표시 형태와 친구 선택 유형을 선택할 수 있습니다.
풀 스크린 형태의 친구 피커를 사용하려면 viewType
을 FULL
로 지정하고, 팝업 뷰 형태를 사용하려면 POPUP
으로 지정합니다.
멀티 피커를 사용하려면 enableMulti
를 true
로, 싱글 피커를 사용하려면 enableMulti
를 false
로 지정합니다. 미설정 시, 멀티 피커가 적용됩니다.
이 외에 피커의 화면 방향, 검색 기능 등 세부적인 설정은 OpenPickerFriendRequestParams
를 지정해 수정할 수 있습니다. 자세한 파라미터 정보는 레퍼런스와 친구 피커 커스텀 요소에서 확인할 수 있습니다.
사용자가 친구 피커에서 친구 선택을 완료하면 선택한 친구 수와 친구 정보가 담긴 SelectedUsers
객체가 반환됩니다. 이 객체는 선택된 각 친구의 정보를 담은 SelectedUser
객체의 배열입니다.
요청에 실패했거나 문제가 발생한 경우 에러 코드에서 원인을 확인합니다.
// 파라미터 설정
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title = "싱글 피커", // 피커 이름
viewAppearance = ViewAppearance.AUTO, // 피커 화면 모드
orientation = PickerOrientation.AUTO, // 피커 화면 방향
enableSearch = true, // 검색 기능 사용 여부
enableIndex = true, // 인덱스뷰 사용 여부
showFavorite = true // 즐겨찾기 친구 표시 여부
)
// 피커 호출
PickerClient.instance.selectFriend(
context = context!!,
params = openPickerFriendRequestParams,
viewType = ViewType.FULL,
enableMulti = false,
) { selectedUsers, error ->
if (error != null) {
Log.e(TAG, "친구 선택 실패", error)
} else {
Log.d(TAG, "친구 선택 성공 $selectedUsers")
}
}
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title = "멀티 피커", // 피커 이름
viewAppearance = ViewAppearance.AUTO, // 피커 화면 모드
orientation = PickerOrientation.AUTO, // 피커 화면 방향
enableSearch = true, // 검색 기능 사용 여부
enableIndex = true, // 인덱스뷰 사용 여부
showFavorite = true, // 즐겨찾기 친구 표시 여부
showPickedFriend = true, // 선택한 친구 표시 여부, 멀티 피커에만 사용 가능
maxPickableCount = 5, // 선택 가능한 최대 대상 수
minPickableCount = 1 // 선택 가능한 최소 대상 수
)
PickerClient.instance.selectFriend(
context = context!!,
params = openPickerFriendRequestParams,
viewType = ViewType.FULL
) { selectedUsers, error ->
if (error != null) {
Log.e(TAG, "친구 선택 실패", error)
} else {
Log.d(TAG, "친구 선택 성공 $selectedUsers")
}
}
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title = "싱글 피커", // 피커 이름
viewAppearance = ViewAppearance.AUTO, // 피커 화면 모드
orientation = PickerOrientation.AUTO, // 피커 화면 방향
enableSearch = true, // 검색 기능 사용 여부
enableIndex = true, // 인덱스뷰 사용 여부
showFavorite = true // 즐겨찾기 친구 표시 여부
)
PickerClient.rx.selectFriend(
context = context!!,
params = openPickerFriendRequestParams,
viewType = ViewType.FULL,
enableMulti = false,
).subscribe({ selectedUsers ->
Log.d(TAG, "친구 선택 성공 $selectedUsers")
}, { error ->
Log.e(TAG, "친구 선택 실패", error)
}).addTo(disposables)
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title = "멀티 피커", // 피커 이름
viewAppearance = ViewAppearance.AUTO, // 피커 화면 모드
orientation = PickerOrientation.AUTO, // 피커 화면 방향
enableSearch = true, // 검색 기능 사용 여부
enableIndex = true, // 인덱스뷰 사용 여부
showFavorite = true, // 즐겨찾기 친구 표시 여부
showPickedFriend = true, // 선택한 친구 표시 여부, 멀티 피커에만 사용 가능
maxPickableCount = 5, // 선택 가능한 최대 대상 수
minPickableCount = 1 // 선택 가능한 최소 대상 수
)
PickerClient.rx.selectFriend(
context = context!!,
params = openPickerFriendRequestParams,
viewType = ViewType.FULL,
).subscribe({ selectedUsers ->
Log.d(TAG, "친구 선택 성공 $selectedUsers")
}, { error ->
Log.e(TAG, "친구 선택 실패", error)
}).addTo(disposables)
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title = "싱글 피커", // 피커 이름
viewAppearance = ViewAppearance.AUTO, // 피커 화면 모드
orientation = PickerOrientation.AUTO, // 피커 화면 방향
enableSearch = true, // 검색 기능 사용 여부
enableIndex = true, // 인덱스뷰 사용 여부
showFavorite = true // 즐겨찾기 친구 표시 여부
)
PickerClient.instance.selectFriend(
context = context!!,
params = openPickerFriendRequestParams,
viewType = ViewType.POPUP,
enableMulti = false,
) { selectedUsers, error ->
if (error != null) {
Log.e(TAG, "친구 선택 실패", error)
} else {
Log.d(TAG, "친구 선택 성공 $selectedUsers")
}
}
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title = "멀티 피커", // 피커 이름
viewAppearance = ViewAppearance.AUTO, // 피커 화면 모드
orientation = PickerOrientation.AUTO, // 피커 화면 방향
enableSearch = true, // 검색 기능 사용 여부
enableIndex = true, // 인덱스뷰 사용 여부
showFavorite = true, // 즐겨찾기 친구 표시 여부
showPickedFriend = true, // 선택한 친구 표시 여부, 멀티 피커에만 사용 가능
maxPickableCount = 5, // 선택 가능한 최대 대상 수
minPickableCount = 1 // 선택 가능한 최소 대상 수
)
PickerClient.instance.selectFriend(
context = context!!,
params = openPickerFriendRequestParams,
viewType = ViewType.POPUP,
) { selectedUsers, error ->
if (error != null) {
Log.e(TAG, "친구 선택 실패", error)
} else {
Log.d(TAG, "친구 선택 성공 $selectedUsers")
}
}
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title = "싱글 피커", // 피커 이름
viewAppearance = ViewAppearance.AUTO, // 피커 화면 모드
orientation = PickerOrientation.AUTO, // 피커 화면 방향
enableSearch = true, // 검색 기능 사용 여부
enableIndex = true, // 인덱스뷰 사용 여부
showFavorite = true // 즐겨찾기 친구 표시 여부
)
PickerClient.rx.selectFriend(
context = context!!,
params = openPickerFriendRequestParams,
viewType = ViewType.POPUP,
enableMulti = false,
).subscribe({ selectedUsers ->
Log.d(TAG, "친구 선택 성공 $selectedUsers")
}, { error ->
Log.e(TAG, "친구 선택 실패", error)
}).addTo(disposables)
val openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title = "멀티 피커", // 피커 이름
viewAppearance = ViewAppearance.AUTO, // 피커 화면 모드
orientation = PickerOrientation.AUTO, // 피커 화면 방향
enableSearch = true, // 검색 기능 사용 여부
enableIndex = true, // 인덱스뷰 사용 여부
showFavorite = true, // 즐겨찾기 친구 표시 여부
showPickedFriend = true, // 선택한 친구 표시 여부, 멀티 피커에만 사용 가능
maxPickableCount = 5, // 선택 가능한 최대 대상 수
minPickableCount = 1 // 선택 가능한 최소 대상 수
)
PickerClient.rx.selectFriend(
context = context!!,
params = openPickerFriendRequestParams,
viewType = ViewType.POPUP,
).subscribe({ selectedUsers ->
Log.d(TAG, "친구 선택 성공 $selectedUsers")
}, { error ->
Log.e(TAG, "친구 선택 실패", error)
}).addTo(disposables)
레퍼런스 | 앱 설정 |
---|---|
[SDK, RxSDK] friends() [SDK] Friends |
설치 초기화 |
권한 | 사전 설정 | 카카오 로그인 | 동의항목 |
---|---|---|---|
필요: 사용 권한 |
플랫폼 등록 카카오 로그인 활성화 동의항목 |
필요 | 필요: 카카오 서비스 내 친구목록 (프로필사진, 닉네임, 즐겨찾기 포함) |
현재 로그인한 사용자의 카카오톡 친구 목록을 불러옵니다.
friends()
API를 호출합니다. 요청 시 친구 목록의 정렬 순서, 한 페이지당 친구 수를 선택적으로 지정할 수 있습니다. 파라미터 없이 요청 시 기본 설정대로 요청이 전송됩니다.
요청 성공 시 Friends
객체를 응답으로 받습니다. Friends
객체는 각 친구의 정보를 담은 Friend
객체의 리스트(List)로 구성되어 있습니다. 자세한 카카오톡 친구 정보 구성은 REST 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)