이 문서는 Kakao SDK for iOS(이하 iOS SDK)를 사용한 카카오톡 채널 기능 구현 방법을 안내합니다.
카카오톡 채널 기능은 카카오톡 모듈인 KakaoSDKTalk
및 RxKakaoSDKTalk
가 제공합니다. 모듈 설치 방법은 설치를 참고합니다.
카카오 로그인이 필요한 API인 카카오톡 채널 관계 확인하기 API를 사용할 경우, 카카오 로그인 모듈도 사용하도록 설정해야 합니다.
모듈 설치 후 카카오톡 채널 기능을 사용하려면 다음과 같이 import
합니다.
import KakaoSDKTalk
//카카오톡 채널 관계 확인하기 API를 사용할 경우
import KakaoSDKUser
import RxKakaoSDKTalk
import KakaoSDKTalk
//카카오톡 채널 관계 확인하기 API를 사용할 경우
import RxKakaoSDKUser
import KakaoSDKUser
권한 | 사전 설정 | 카카오 로그인 | 사용자 동의 | 레퍼런스 |
---|---|---|---|---|
- | 플랫폼 등록 | - | - | addChannel() makeUrlForAddChannel() |
이 기능을 사용하려면 앱 실행 허용 목록에 kakaoplus
를 추가해야 합니다.
사용자가 카카오톡 채널을 친구 추가하러 이동합니다. TalkApi
의 addChannel()
을 호출합니다. 카카오톡 채널의 프로필 ID를 전달해야 합니다.
TalkApi.shared.addChannel(channelPublicId: "${CHANNEL_ID}") {
if let error = error {
print(error)
} else {
print("addChannel() success.")
// do something
...
}
}
let disposeBag = DisposeBag()
TalkApi.shared.rx.addChannel(channelPublicId: "${CHANNEL_ID}")
.subscribe(onCompleted:{
print("addChannel() success")
//do something
...
}, onError: {error in
print(error)
})
.disposed(by: disposeBag)
카카오톡 채널 추가 여부는 이 API 호출 결과로 알 수 없습니다. 카카오톡 채널 관계 확인하기 API로 사용자와 카카오톡 채널의 관계를 조회해야 추가 또는 삭제 상태를 알 수 있습니다.
ReactiveX iOS SDK는 지원하지 않는 기능입니다.
카카오톡 채널로 즉시 이동하지 않고, 필요한 시점에 연결 페이지를 거쳐 이동하도록 할 수 있습니다. makeUrlForAddChannel()
로 연결 페이지 URL을 요청합니다. 카카오톡 채널의 프로필 ID를 전달해야 합니다. 연결 페이지 URL은 safariViewController
를 통해 present()
메소드로 실행할 수 있습니다.
//in ViewController
var safariViewController : SFSafariViewController? // to keep instance
...
self.safariViewController = SFSafariViewController(url: TalkApi.shared.makeUrlForAddChannel(channelPublicId:"{channel-id}")!)
guard (self.safariViewController != nil) else { return }
self.safariViewController?.modalTransitionStyle = .crossDissolve
self.safariViewController?.modalPresentationStyle = .overCurrentContext
self.present(self.safariViewController!, animated: true) {
print("카카오톡 채널 추가 연결 페이지 실행 성공")
}
권한 | 사전 설정 | 카카오 로그인 | 사용자 동의 | 레퍼런스 |
---|---|---|---|---|
- | 플랫폼 등록 | - | - | chatChannel() makeUrlForChatChannel() |
이 기능을 사용하려면 앱 실행 허용 목록에 kakaoplus
를 추가해야 합니다.
사용자가 서비스의 카카오톡 채널과 1:1 채팅을 시작합니다. TalkApi
의 chatChannel()
API로 요청합니다. 카카오톡 채널의 프로필 ID를 전달해야 합니다.
TalkApi.shared.chatChannel(channelPublicId: "${CHANNEL_ID}") {
if let error = error {
print(error)
} else {
print("chatChannel() success.")
// do something
...
}
}
let disposeBag = DisposeBag()
TalkApi.shared.rx.chatChannel(channelPublicId: "${CHANNEL_ID}")
.subscribe(onCompleted:{
print("chatChannel() success")
//do something
...
}, onError: {error in
print(error)
})
.disposed(by: disposeBag)
ReactiveX iOS SDK는 지원하지 않는 기능입니다.
카카오톡 채널로 즉시 이동하지 않고, 필요한 시점에 연결 페이지를 거쳐 이동하도록 할 수 있습니다. makeUrlForChatChannel()
로 연결 페이지 URL을 요청합니다. 카카오톡 채널의 프로필 ID를 전달해야 합니다. 연결 페이지 URL은 safariViewController
를 통해 present()
메소드로 실행할 수 있습니다.
//in ViewController
var safariViewController : SFSafariViewController? // to keep instance
...
self.safariViewController = SFSafariViewController(url: TalkApi.shared.makeUrlForChatChannel(channelPublicId:"{channel-id}")!)
guard (self.safariViewController != nil) else { return }
self.safariViewController?.modalTransitionStyle = .crossDissolve
self.safariViewController?.modalPresentationStyle = .overCurrentContext
self.present(self.safariViewController!, animated: true) {
print("Kakao Talk Channel chat 연결 페이지 실행 성공")
}
연결 페이지가 실행되었을 때, 해당 카카오톡 채널은 사용자에게 "안녕하세요, 무엇을 도와드릴까요?"라는 문구와 함께 사용자가 채팅을 요청했던 연결 페이지 URL을 담은 안내 메시지를 전송합니다.
권한 | 사전 설정 | 카카오 로그인 | 사용자 동의 | 레퍼런스 |
---|---|---|---|---|
- | 플랫폼 등록 카카오 로그인 활성화 동의 항목 카카오톡 채널 연결 |
필요 | 필요: 카카오톡 채널 추가 상태 및 내역 |
공통Channel iOS SDK channels() ReactiveX iOS SDK channels() |
TalkApi
의 카카오톡 채널 관계 확인하기 API인 channels()
를 호출합니다.
TalkApi.shared.channels { (channels, error) in
if let error = error {
print(error)
}
else {
print("channels() success.")
//do something
_ = channels
}
}
// Class member property
let disposeBag = DisposeBag()
TalkApi.shared.rx.channels()
.retry(when: Auth.shared.rx.incrementalAuthorizationRequired())
.subscribe (onSuccess:{ (channels) in
print("channels() success.")
//do something
_ = channels
}, onFailure: {error in
print(error)
})
.disposed(by: disposeBag)
요청 성공 시 응답으로 받는 Channels
객체는 사용자와 각 카카오톡 채널의 관계 정보를 담은 Channel
객체의 배열(Array)을 포함합니다. Channel
은 카카오톡 채널의 uuid
, 사용자의 해당 카카오톡 채널 추가 상태, 마지막 변경 일시 정보를 포함합니다.
사용자가 [카카오톡 채널 추가 상태 및 내역] 동의 항목에 동의하지 않아 에러 응답을 받았을 경우, 추가 항목 동의 받기 기능을 사용해 사용자에게 다시 동의를 요청할 수 있습니다.
자세한 응답 정보는 REST API, 레퍼런스를 참고합니다.
사용자가 서비스와 연결된 카카오톡 채널을 추가 또는 차단했을 때 알림을 받으려면 카카오톡 채널 관계 알림을 사용합니다.