이 문서는 Kakao SDK for Android(이하 Android SDK)를 사용한 카카오톡 채널 기능 구현 방법을 안내합니다.
카카오톡 채널 API는 카카오톡 모듈의 TalkApiClient
가 제공합니다. 모듈 설정을 참고하여 build.gradle(Module) 파일에 v2-talk
모듈을 사용하도록 설정합니다.
카카오 로그인이 필요한 API인 카카오톡 채널 관계 확인하기 API를 사용할 경우, build.gradle(Module) 파일에 카카오 로그인 모듈인 v2-user
도 사용하도록 설정해야 합니다.
권한 | 사전 설정 | 카카오 로그인 | 사용자 동의 | 레퍼런스 |
---|---|---|---|---|
- | 플랫폼 등록 | - | - | addChannel() addChannelUrl() |
사용자가 카카오톡 채널을 친구 추가하러 이동합니다. TalkApiClient
의 addChannel()
로 요청합니다. 카카오톡 채널의 프로필 ID를 전달해야 합니다.
// 카카오톡 채널 추가하기
TalkApiClient.instance.addChannel(context, "_ZeUTxl") { error ->
if (error != null) {
Log.i(TAG, "카카오톡 채널 추가 실패 $error")
}
}
var disposables = CompositeDisposable()
// 카카오톡 채널 추가하기
TalkApiClient.rx.addChannel(context, "_ZeUTxl")
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
Log.i(TAG, "성공")
}, { error ->
Log.e(TAG, "실패", error)
})
.addTo(disposables)
카카오톡 채널 추가 여부는 이 API 호출 결과로 알 수 없습니다. 카카오톡 채널 관계 확인하기 API로 사용자와 카카오톡 채널의 관계를 조회해야 추가 또는 삭제 상태를 알 수 있습니다.
ReactiveX Android SDK는 지원하지 않는 기능입니다.
카카오톡 채널로 즉시 이동하지 않고, 필요한 시점에 연결 페이지를 거쳐 이동하도록 할 수 있습니다. addChannelUrl()
로 연결 페이지 URL을 요청합니다. 카카오톡 채널의 프로필 ID를 전달해야 합니다. 연결 페이지 URL은 KakaoCustomTabsClient
의 openWithDefault()
API를 사용해 실행할 수 있습니다.
// 카카오톡 채널 추가하기 URL
val url = TalkApiClient.instance.addChannelUrl("_ZeUTxl")
// CustomTabs 로 열기
KakaoCustomTabsClient.openWithDefault(context, url)
권한 | 사전 설정 | 카카오 로그인 | 사용자 동의 | 레퍼런스 |
---|---|---|---|---|
- | 플랫폼 등록 | - | - | chatChannel() chatChannelUrl() |
사용자가 서비스의 카카오톡 채널과 1:1 채팅을 시작합니다. TalkApiClient
의 chatChannel()
API로 요청합니다. 카카오톡 채널의 프로필 ID를 전달해야 합니다.
// 카카오톡 채널 채팅하기
TalkApiClient.instance.chatChannel(context, "_ZeUTxl") { error ->
if (error != null) {
Log.i(TAG, "카카오톡 채널 채팅하기 실패 $error")
}
}
var disposables = CompositeDisposable()
TalkApiClient.rx.chatChannel(context, "_ZeUTxl")
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
Log.i(TAG, "성공")
}, { error ->
Log.e(TAG, "실패", error)
})
.addTo(disposables)
ReactiveX Android SDK는 지원하지 않는 기능입니다.
카카오톡 채널로 즉시 이동하지 않고, 필요한 시점에 연결 페이지를 거쳐 이동하도록 할 수 있습니다. chatChannelUrl()
로 연결 페이지 URL을 요청합니다. 카카오톡 채널의 프로필 ID를 전달해야 합니다. 연결 페이지 URL은 KakaoCustomTabsClient
의 openWithDefault()
API를 사용해 실행할 수 있습니다.
// 카카오톡 채널 채팅 URL
val url = TalkApiClient.instance.chatChannelUrl("_ZeUTxl")
// CustomTabs 로 열기
KakaoCustomTabsClient.openWithDefault(context, url)
연결 페이지가 실행되었을 때, 해당 카카오톡 채널은 사용자에게 "안녕하세요, 무엇을 도와드릴까요?"라는 문구와 함께 사용자가 채팅을 요청했던 연결 페이지 URL을 담은 안내 메시지를 전송합니다.
권한 | 사전 설정 | 카카오 로그인 | 사용자 동의 | 레퍼런스 |
---|---|---|---|---|
- | 플랫폼 등록 카카오 로그인 활성화 동의항목 카카오톡 채널 연결 |
필요 | 필요: 카카오톡 채널 추가 상태 및 내역 |
공통Channel Android SDK channels() ReactiveX Android SDK channels() |
TalkApiClient
의 카카오톡 채널 관계 확인하기 API인 channels()
를 호출합니다.
// 카카오톡 채널 관계 확인하기
TalkApiClient.instance.channels { relations, error ->
if (error != null) {
Log.e(TAG, "채널 관계 확인 실패", error)
}
else if (relations != null) {
Log.i(TAG, "채널 관계 확인 성공 \n${relations.channels}")
}
}
var disposables = CompositeDisposable()
// 카카오톡 채널 관계 확인하기
TalkApiClient.rx.channels()
.retryWhen(
// InsufficientScope 에러에 대해 추가 동의 후 재요청
RxAuthOperations.instance.incrementalAuthorizationRequired(context)
)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ relations ->
Log.i(TAG, "채널 관계 확인 성공 \n${relations.channels}")
}, { error ->
Log.e(TAG, "채널 관계 확인 실패", error)
})
.addTo(disposables)
요청 성공 시 응답으로 받는 Channels
객체는 사용자의 회원번호와 각 카카오톡 채널의 관계 정보를 담은 Channel
객체의 리스트(List)를 포함합니다. Channel
은 카카오톡 채널의 uuid
, 사용자의 해당 카카오톡 채널 추가 상태, 마지막 변경 일시 정보를 포함합니다.
사용자가 [카카오톡 채널 추가 상태 및 내역] 동의항목에 동의하지 않아 에러 응답을 받았을 경우, 추가 항목 동의 받기 기능을 사용해 사용자에게 다시 동의를 요청할 수 있습니다.
자세한 응답 정보는 REST API, 레퍼런스를 참고합니다.
사용자가 서비스와 연결된 카카오톡 채널을 추가 또는 차단했을 때 알림을 받으려면 카카오톡 채널 관계 알림을 사용합니다.