이 문서는 Kakao SDK for iOS(이하 iOS SDK)를 사용한 카카오톡 소셜 API 구현 방법을 안내합니다.
카카오톡 소셜 API는 카카오톡 모듈인 KakaoSDKTalk
및 RxKakaoSDKTalk
가 제공합니다. 피커의 경우, 친구 피커 UI에 대한 리소스 번들을 포함한 KakaoSDKFriend
및 KakaoSDKFriend
가 제공합니다. 설치를 참고하여 필요한 모듈을 설치합니다.
모듈 설치 후 카카오 로그인과 카카오톡 소셜 API를 사용하려면 다음과 같이 import
합니다. 피커 사용 시에는 해당 모듈을 추가로 import
해야 합니다.
import KakaoSDKAuth
import KakaoSDKUser
import KakaoSDKTalk
import KakaoSDKFriend // 피커 사용 시
import KakaoSDKAuth
import RxKakaoSDKAuth
import KakaoSDKUser
import RxKakaoSDKUser
import KakaoSDKTalk
import RxKakaoSDKTalk
import KakaoSDKFriend // 피커 사용 시
import RxKakaoSDKFriend // 피커 사용 시
권한 | 사전 설정 | 카카오 로그인 | 사용자 동의 | 레퍼런스 |
---|---|---|---|---|
- | 플랫폼 등록 카카오 로그인 활성화 동의 항목 |
필요 | 필요: 프로필 정보(닉네임/프로필 사진) 닉네임 프로필 사진 |
공통TalkProfile iOS SDK profile() ReactiveX iOS SDK profile() |
현재 로그인한 사용자의 카카오톡 프로필 정보를 받습니다. 카카오톡 API를 제공하는 TalkApi
의 profile()
API를 호출합니다.
TalkApi.shared.profile {(profile, error) in
if let error = error {
print(error)
}
else {
print("profile() success.")
//do something
_ = profile
}
}
// Class member property
let disposeBag = DisposeBag()
TalkApi.shared.rx.profile()
.retry(when: Auth.shared.rx.incrementalAuthorizationRequired())
.subscribe (onSuccess:{ (profile) in
print("success.")
//do something
_ = profile
}, onFailure: {error in
print(error)
})
.disposed(by: disposeBag)
요청이 성공하면 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 | Bool |
친구 검색 기능 사용 여부 (기본값: true ) |
X |
enableIndex | Bool |
친구 목록 인덱스뷰 사용 여부 (기본값: true ) |
X |
showMyProfile | Bool |
내 프로필 표시 여부true 일 경우 자신의 프로필도 선택 가능(기본값: true ) |
X |
showFavorite | Bool |
즐겨찾기 친구 표시 여부 (기본값: true ) |
X |
showPickedFriend | Bool |
멀티 피커 전용 선택한 친구 표시 여부 (기본값: true ) |
X |
maxPickableCount | Int |
멀티 피커 전용 선택 가능한 친구 수의 최대 값 minPickableCount 보다 크거나 같은 수(기본값: 30 , 최대: 100 ) |
X |
minPickableCount | Int |
멀티 피커 전용 선택 가능한 친구 수의 최소 값 maxPickableCount 보다 작거나 같은 수(기본값: 1 , 최대: 100 ) |
X |
let openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title: "풀 스크린 싱글 친구 피커", //default "친구 선택"
viewAppearance: .auto, //default .auto
orientation: .auto, //default .auto
enableSearch: true, //default true
enableIndex: true, //default true
showMyProfile: true, //default true
showFavorite: true //default true
)
PickerApi.shared.selectFriend(params: openPickerFriendRequestParams) { selectedUsers, error in
if let error = error {
print(error)
}
else {
print("selectFriend(params:) success.")
//do something
_ = selectedUsers
}
}
// Class member property
let disposeBag = DisposeBag()
let openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title: "풀 스크린 싱글 친구 피커", //default "친구 선택"
viewAppearance: .auto, //default .auto
orientation: .auto, //default .auto
enableSearch: true, //default true
enableIndex: true, //default true
showMyProfile: true, //default true
showFavorite: true //default true
)
PickerApi.shared.rx.selectFriend(params: openPickerFriendRequestParams)
.subscribe (onNext:{ (selectedUsers) in
print("selectFriend(params:) success.")
//do something
_ = selectedUsers
}, onError: {error in
print(error)
})
.disposed(by: disposeBag)
let openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title: "팝업 싱글 친구 피커", //default "친구 선택"
viewAppearance: .auto, //default .auto
orientation: .auto, //default .auto
enableSearch: true, //default true
enableIndex: true, //default true
showMyProfile: true, //default true
showFavorite: true //default true
)
PickerApi.shared.selectFriendPopup(params: openPickerFriendRequestParams) { selectedUsers, error in
if let error = error {
print(error)
}
else {
print("selectFriendPopup(params:) success.")
//do something
_ = selectedUsers
}
}
// Class member property
let disposeBag = DisposeBag()
let openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title: "팝업 싱글 친구 피커", //default "친구 선택"
viewAppearance: .auto, //default .auto
orientation: .auto, //default .auto
enableSearch: true, //default true
enableIndex: true, //default true
showMyProfile: true, //default true
showFavorite: true //default true
)
PickerApi.shared.rx.selectFriendPopup(params: openPickerFriendRequestParams)
.subscribe (onNext:{ (selectedUsers) in
print("selectFriendPopup(params:) success.")
//do something
_ = selectedUsers
}, onError: {error in
print(error)
})
.disposed(by: disposeBag)
let openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title: "풀 스크린 멀티 친구 피커", //default "친구 선택"
viewAppearance: .auto, //default .auto
orientation: .auto, //default .auto
enableSearch: true, //default true
enableIndex: true, //default true
showMyProfile: true, //default true
showFavorite: true, //default true
showPickedFriend: nil, //default true
maxPickableCount: nil, //default 30
minPickableCount: nil //default 1
)
PickerApi.shared.selectFriends(params: openPickerFriendRequestParams) { selectedUsers, error in
if let error = error {
print(error)
}
else {
print("selectFriends(params:) success.")
//do something
_ = selectedUsers
}
}
// Class member property
let disposeBag = DisposeBag()
let openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title: "풀 스크린 멀티 친구 피커", //default "친구 선택"
viewAppearance: .auto, //default .auto
orientation: .auto, //default .auto
enableSearch: true, //default true
enableIndex: true, //default true
showMyProfile: true, //default true
showFavorite: true, //default true
showPickedFriend: nil, //default true
maxPickableCount: nil, //default 30
minPickableCount: nil //default 1
)
PickerApi.shared.rx.selectFriends(params: openPickerFriendRequestParams)
.subscribe (onNext:{ (selectedUsers) in
print("selectFriends(params:) success.")
//do something
_ = selectedUsers
}, onError: {error in
print(error)
})
.disposed(by: disposeBag)
let openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title: "팝업 멀티 친구 피커", //default "친구 선택"
viewAppearance: .auto, //default .auto
orientation: .auto, //default .auto
enableSearch: true, //default true
enableIndex: true, //default true
showMyProfile: true, //default true
showFavorite: true, //default true
showPickedFriend: nil, //default true
maxPickableCount: nil, //default 30
minPickableCount: nil //default 1
)
PickerApi.shared.selectFriendsPopup(params: openPickerFriendRequestParams) { selectedUsers, error in
if let error = error {
print(error)
}
else {
print("selectFriendsPopup(params:) success.")
//do something
_ = selectedUsers
}
}
// Class member property
let disposeBag = DisposeBag()
let openPickerFriendRequestParams = OpenPickerFriendRequestParams(
title: "팝업 멀티 친구 피커", //default "친구 선택"
viewAppearance: .auto, //default .auto
orientation: .auto, //default .auto
enableSearch: true, //default true
enableIndex: true, //default true
showMyProfile: true, //default true
showFavorite: true, //default true
showPickedFriend: nil, //default true
maxPickableCount: nil, //default 30
minPickableCount: nil //default 1
)
PickerApi.shared.rx.selectFriendsPopup(params:openPickerFriendRequestParams)
.subscribe (onNext:{ (selectedUsers) in
print("selectFriendsPopup(params:) success.")
//do something
_ = selectedUsers
}, onError: {error in
self.errorHandler(error: error)
})
.disposed(by: disposeBag)
사용자가 피커 화면에서 친구 선택을 완료하면 SelectedUsers
객체가 반환됩니다. 해당 객체는 선택된 각 친구의 정보를 SelectedUser
객체의 배열로 포함합니다. 요청에 실패했거나 문제가 발생한 경우 문제 해결에서 원인을 확인합니다.
이름 | 타입 | 설명 | 필수 |
---|---|---|---|
totalCount | Int |
친구 피커에서 사용자가 선택한 친구 수 선택한 친구 정보 목록의 친구 수와 다를 수 있음 참고: 피커를 통해 제공받은 친구 정보의 수가 선택한 친구 수보다 적은 경우 |
O |
users | [SelectedUser] |
선택한 친구 정보 목록 | X |
이름 | 타입 | 설명 | 필수 |
---|---|---|---|
uuid | String |
친구마다 고유한 값을 가지는 참고용 코드(Code) 카카오톡 메시지 전송 시 사용 참고: 카카오톡을 탈퇴하거나 새로 가입할 경우 값이 변경될 수 있음 |
O |
id | Int64 |
친구의 회원번호 | X |
profileNickname | String |
카카오톡 프로필 닉네임 | X |
profileThumbnailImage | URL |
카카오톡 프로필 썸네일 이미지 | X |
favorite | Bool |
카카오톡 친구 즐겨찾기 설정 여부 | X |
권한 | 사전 설정 | 카카오 로그인 | 사용자 동의 | 레퍼런스 |
---|---|---|---|---|
필요: 사용 권한 |
플랫폼 등록 카카오 로그인 활성화 동의 항목 |
필요 | 필요: 카카오 서비스 내 친구목록(프로필사진, 닉네임, 즐겨찾기 포함) |
navigateIntent() |
현재 로그인한 사용자의 카카오톡 친구 목록을 불러옵니다. TalkApi
의 friends()
API를 호출합니다. 요청 시 친구 목록의 정렬 순서, 한 페이지당 친구 수를 선택적으로 지정할 수 있습니다. 파라미터 없이 요청 시 기본 설정대로 요청이 전송됩니다.
TalkApi.shared.friends {(friends, error) in
if let error = error {
print(error)
}
else {
//do something
_ = friends
}
}
// Class member property
let disposeBag = DisposeBag()
TalkApi.shared.rx.friends()
.retry(when: Auth.shared.rx.incrementalAuthorizationRequired())
.subscribe (onSuccess:{ (friends) in
//do something
_ = friends
}, onFailure: {error in
print(error)
})
.disposed(by: disposeBag)
요청 성공 시 Friends
객체를 응답으로 받습니다. Friends
객체는 전체 친구 수인 totalCount
와 각 친구의 정보를 담은 Friend
객체의 리스트(List)인 elements
, 즐겨찾기한 친구 수인 favoriteCount
로 구성되어 있습니다. 카카오톡 친구 정보 구성에 대해서는 REST API 가이드를 함께 참고합니다.
만약 사용자가 카카오톡 친구 목록 제공에 동의하지 않아 요청이 실패한 경우, 다음 내용을 참고해 사용자 동의를 받은 후 다시 요청합니다.