페이지 이동경로
  • 문서>
  • 카카오톡 채널>
  • iOS

카카오톡 채널

iOS

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

시작하기 전에

카카오톡 채널 기능은 카카오톡 모듈인 KakaoSDKTalkRxKakaoSDKTalk가 제공합니다. 모듈 설치 방법은 설치를 참고합니다.

카카오 로그인이 필요한 API인 카카오톡 채널 관계 확인하기 API를 사용할 경우, 카카오 로그인 모듈도 사용하도록 설정해야 합니다.

모듈 설치 후 카카오톡 채널 기능을 사용하려면 다음과 같이 import합니다.

Swift
RxSwift
import KakaoSDKTalk

//카카오톡 채널 관계 확인하기 API를 사용할 경우
import KakaoSDKUser
import RxKakaoSDKTalk
import KakaoSDKTalk

//카카오톡 채널 관계 확인하기 API를 사용할 경우
import RxKakaoSDKUser
import KakaoSDKUser

카카오톡 채널 추가하기

기본 정보
권한 사전 설정 카카오 로그인 사용자 동의 레퍼런스
- 플랫폼 등록 - - addChannel()
makeUrlForAddChannel()
참고: 앱 실행 허용 목록

이 기능을 사용하려면 앱 실행 허용 목록kakaoplus를 추가해야 합니다.


사용자가 카카오톡 채널을 친구 추가하러 이동합니다. TalkApiaddChannel()을 호출합니다. 카카오톡 채널의 프로필 ID를 전달해야 합니다.

Swift
RxSwift
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 채팅을 시작합니다. TalkApichatChannel() API로 요청합니다. 카카오톡 채널의 프로필 ID를 전달해야 합니다.

Swift
RxSwift
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()를 호출합니다.

Swift
RxSwift
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, 레퍼런스를 참고합니다.

사용자가 서비스와 연결된 카카오톡 채널을 추가 또는 차단했을 때 알림을 받으려면 카카오톡 채널 관계 알림을 사용합니다.

더 보기