이 문서는 Kakao SDK for iOS(이하 iOS SDK)를 사용한 카카오톡 채널 기능 구현 방법을 안내합니다.
카카오톡 채널 추가 방식은 카카오톡 채널 간편 추가하기와 카카오톡 채널 추가하기 두 가지입니다. 서비스 페이지 내에서 바로 채널 추가를 요청할 수 있고, 별도의 확인 절차 없이 응답으로 결과를 확인할 수 있는 카카오톡 채널 간편 추가하기 사용을 권장합니다.
카카오톡 채널 추가를 참고해 어떤 방식을 사용할지 결정합니다.
레퍼런스 | 앱 설정 |
---|---|
[SDK, RxSDK] followChannel() [SDK] FollowChannelResult |
설치 모듈 설정 초기화 |
권한 | 사전 설정 | 카카오 로그인 | 동의항목 |
---|---|---|---|
- | 플랫폼 등록 카카오 로그인 활성화 동의항목 비즈니스 채널 연결 |
- | - |
카카오톡 채널 간편 추가하기는 카카오 로그인을 도입하지 않아도 사용할 수 있습니다. 하지만, 사용자에게 불필요한 로그인 요청을 최소화해 더 나은 사용성을 제공할 수 있도록 카카오 로그인 도입 서비스에서 사용을 권장합니다.
사용자에게 지정된 카카오톡 채널의 친구 추가를 요청합니다. 서비스 내에서 요청 화면을 표시하고 응답으로 결과를 전달받을 수 있습니다.
TalkApi
의 followChannel()
로 요청합니다. 카카오톡 채널 프로필 ID를 전달해야 합니다. 서비스의 카카오 로그인 사용 여부에 따른 채널 추가 요청 처리 방법은 카카오 로그인 사용 서비스와 카카오 로그인 미사용 서비스를 참고합니다.
요청 성공 시 응답으로 받는 FollowChannelResult
객체는 카카오톡 채널 프로필 ID와 요청 결과를 포함합니다. 요청 실패 또는 문제 발생 시 문제 해결에서 원인을 확인합니다.
TalkApi.shared.followChannel(channelPublicId: "${CHANNEL_PUBLIC_ID}") { result, error in
if let error = error {
print(error)
// 채널 간편 추가 실패 처리
}
else {
print(result)
// 채널 간편 추가 성공 처리
...
}
}
let disposeBag = DisposeBag()
UserApi.shared.rx.followChannel(channelPublicId:"${CHANNEL_ID}")
.subscribe(onSuccess: { (result) in
print("followChannel(channelPublicId:) success.")
// 채널 간편 추가 성공 처리
...
}, onFailure: { error in
print(error)
// 채널 간편 추가 실패 처리
})
.disposed(by: disposeBag)
레퍼런스 | 앱 설정 |
---|---|
[SDK, RxSDK] addChannel() [SDK] makeUrlForAddChannel() |
설치 모듈 설정 초기화 커스텀 URL 스킴 앱 실행 허용 목록 |
권한 | 사전 설정 | 카카오 로그인 | 동의항목 |
---|---|---|---|
- | 플랫폼 등록 | - | - |
사용자가 카카오톡 채널을 친구 추가하러 이동합니다.
TalkApi
의 addChannel()
을 호출합니다. 카카오톡 채널의 프로필 ID를 전달해야 합니다.
카카오톡 채널 추가 여부는 이 API 호출 결과로 알 수 없습니다. 카카오톡 채널 관계 확인하기 API로 사용자와 카카오톡 채널의 관계를 조회해야 추가 또는 삭제 상태를 알 수 있습니다.
카카오톡 채널 간편 추가하기를 사용하면 서비스 페이지 내에서 바로 채널 추가를 요청하고 별도의 확인 절차 없이 응답으로 결과를 확인할 수 있습니다.
TalkApi.shared.addChannel(channelPublicId: "${CHANNEL_ID}") {
if let error = error {
print(error)
} else {
print("addChannel() success.")
// 성공 시 동작 구현
...
}
}
let disposeBag = DisposeBag()
TalkApi.shared.rx.addChannel(channelPublicId: "${CHANNEL_ID}")
.subscribe(onCompleted:{
print("addChannel() success")
// 성공 시 동작 구현
...
}, onError: {error in
print(error)
})
.disposed(by: disposeBag)
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("카카오톡 채널 추가 연결 페이지 실행 성공")
}
레퍼런스 | 앱 설정 |
---|---|
[SDK, RxSDK] chatChannel() [SDK] makeUrlForChatChannel() |
설치 모듈 설정 초기화 커스텀 URL 스킴 앱 실행 허용 목록 |
권한 | 사전 설정 | 카카오 로그인 | 동의항목 |
---|---|---|---|
- | 플랫폼 등록 | - | - |
사용자가 서비스의 카카오톡 채널과 1:1 채팅을 시작합니다.
TalkApi
의 chatChannel()
API로 요청합니다. 카카오톡 채널의 프로필 ID를 전달해야 합니다.
이 메서드의 호출 결과는 사용자가 성공적으로 채팅방에 진입했는지 여부를 알려주지 않습니다.
TalkApi.shared.chatChannel(channelPublicId: "${CHANNEL_ID}") {
if let error = error {
print(error)
} else {
print("chatChannel() success.")
// 성공 시 동작 구현
...
}
}
let disposeBag = DisposeBag()
TalkApi.shared.rx.chatChannel(channelPublicId: "${CHANNEL_ID}")
.subscribe(onCompleted:{
print("chatChannel() success")
// 성공 시 동작 구현
...
}, 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을 담은 안내 메시지를 전송합니다.
레퍼런스 | 앱 설정 |
---|---|
[SDK, RxSDK] channels() [SDK] Channel |
설치 모듈 설정 초기화 |
권한 | 사전 설정 | 카카오 로그인 | 동의항목 |
---|---|---|---|
- | 플랫폼 등록 카카오 로그인 활성화 동의항목 카카오톡 채널 연결 |
필요 | 필요: 카카오톡 채널 추가 상태 및 내역 |
현재 로그인한 사용자와 앱에 연결된 카카오톡 채널의 친구 관계를 확인합니다.
사용자가 서비스와 연결된 카카오톡 채널을 추가 또는 차단했을 때 알림을 받으려면 카카오톡 채널 관계 알림을 사용합니다.
TalkApi
의 카카오톡 채널 관계 확인하기 API인 channels()
를 호출합니다.
요청 성공 시 응답으로 받는 Channels
객체는 사용자와 각 카카오톡 채널의 관계 정보를 담은 Channel
객체의 배열(Array)을 포함합니다. Channel
은 카카오톡 채널의 uuid
, 사용자의 해당 카카오톡 채널 추가 상태, 마지막 변경 일시 정보를 포함합니다.
사용자가 [카카오톡 채널 추가 상태 및 내역] 동의항목에 동의하지 않아 에러 응답을 받았을 경우, 추가 항목 동의 받기 기능을 사용해 사용자에게 다시 동의를 요청할 수 있습니다.
자세한 응답 정보는 REST API를 참고합니다.
TalkApi.shared.channels { (channels, error) in
if let error = error {
print(error)
}
else {
print("channels() success.")
// 성공 시 동작 구현
_ = channels
}
}
// Class member property
let disposeBag = DisposeBag()
TalkApi.shared.rx.channels()
.retry(when: Auth.shared.rx.incrementalAuthorizationRequired())
.subscribe (onSuccess:{ (channels) in
print("channels() success.")
// 성공 시 동작 구현
_ = channels
}, onFailure: {error in
print(error)
})
.disposed(by: disposeBag)