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

카카오톡 소셜

iOS

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

시작하기 전에

카카오톡 소셜 API는 카카오톡 모듈인 KakaoSDKTalkRxKakaoSDKTalk가 제공합니다. 피커의 경우, 친구 피커 UI에 대한 리소스 번들을 포함한 KakaoSDKFriendKakaoSDKFriend가 제공합니다. 설치를 참고하여 필요한 모듈을 설치합니다.

모듈 설치 후 카카오 로그인과 카카오톡 소셜 API를 사용하려면 다음과 같이 import합니다. 피커 사용 시에는 해당 모듈을 추가로 import 해야 합니다.

Swift
RxSwift
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를 제공하는 TalkApiprofile() API를 호출합니다.

Swift
RxSwift
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 가이드를 함께 참고합니다.

피커: 친구 선택하기

기본 정보
권한 사전 설정 카카오 로그인 사용자 동의 레퍼런스
필요:
사용 권한
플랫폼 등록
카카오 로그인 활성화
동의항목
권한 필요:
카카오 서비스 내 친구목록(프로필사진, 닉네임, 즐겨찾기 포함)
공통
ViewAppearance
PickerOrientation
iOS SDK
selectFriend()
selectFriendPopup()
selectFriends()
selectFriendsPopup()
ReactiveX iOS SDK
selectFriend()
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 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
예제
예제: 풀 스크린 형태로 싱글 피커 출력
Swift
RxSwift
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) 
예제: 팝업 형태로 싱글 피커 출력
Swift
RxSwift
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)
예제: 풀 스크린 형태로 멀티 피커 출력
Swift
RxSwift
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)
예제: 팝업 형태로 멀티 피커 출력
Swift
RxSwift
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 객체의 배열로 포함합니다. 요청에 실패했거나 문제가 발생한 경우 문제 해결에서 원인을 확인합니다.

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

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

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

친구 목록 가져오기

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

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

Swift
RxSwift
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 가이드를 함께 참고합니다.

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

  • 동의항목에 [카카오 서비스 내 친구목록(프로필사진, 닉네임, 즐겨찾기 포함)]을 사용하도록 설정했는지 확인합니다.
  • 추가 항목 동의 받기를 사용해 '카카오 서비스 내 친구목록(프로필사진, 닉네임, 즐겨찾기 포함)'의 사용자 동의를 받습니다.

더 보기