SDK 개발 프로세스
iOS 환경에서 Kakao i Connect Live SDK를 사용하여 일대일 통화(Live Call), 방송(Live Cast), 그룹 통화(Live Conference) 기능을 구현하는 프로세스는 다음과 같습니다.
그림iOS SDK 개발 프로세스
구분 | 세부 작업 | 필수 여부 | 설명 |
---|---|---|---|
사전 작업 | 서비스 고유 정보 발급 | 필수 |
서비스 고유 정보인 Service ID와 Secret Key 값 발급 |
프로젝트 생성 | 필수 |
새로운 프로젝트를 생성하고, API 및 호환성 레벨을 설정 | |
SDK 설치 | 필수 |
CocoaPods을 사용하여 SDK 설치 | |
iOS SDK 개발 | 레이아웃 등록 | 필수 |
자신의 카메라 화면과 상대방의 화면을 표시할 View(뷰) 등록 |
서비스 개발 | 필수 |
일대일 통화, 방송, 그룹 통화 서비스 별 개발 프로세스 |
안내
해당 문서는 iOS 버전의 Kakao i Connect Live SDK 2.7.17 버전을 기준으로 작성되었습니다.
개발 요구 사항
개발에 필요한 최소 요구 사항은 다음과 같습니다.
표개발 최소 요구사항구분 | 항목 | 최소 버전 |
---|---|---|
운영체제 |
iOS | 11.0 이상 |
소프트웨어 |
Xcode | 9.0 이상 |
사전 작업
Kakao i Connect Live SDK를 사용하여 개발을 수행하기 전에 다음 작업이 꼭 진행되어야 합니다.
서비스 고유 정보 발급받기
Kakao i Connect Live SDK를 사용하기 위해서는 서비스 고유 ID인 Service ID와 Secret Key 값을 반드시 발급받아야 합니다. Service ID와 Secret Key는 프로젝트 생성 시에 자동 생성되며, 이들은 서비스(앱)별로 구분되어 사용량 측정 및 과금의 기준이 됩니다. 하나 이상의 애플리케이션을 만들 경우에는 앱의 개수만큼 Service ID와 Secret Key를 각각 발급받아야 합니다.
-
Kakao i Connect live 홈페이지에서 [Console] 버튼을 클릭한 후, 회원가입을 진행합니다.
- 입력한 이메일 주소로 임시 비밀번호가 발송되며, 로그인 후 비밀번호 변경이 필요합니다.
-
[새 프로젝트 추가] 버튼을 클릭하여 새로운 프로젝트를 생성합니다.
-
해당 프로젝트에서 사용할 서비스 고유 정보인 Service ID와 Secret Key를 확인합니다. 표서비스 고유 정보
구분 설명 Service ID 프로젝트 생성 시 자동으로 생성되는 ID
- 서비스 구분에 활용되는 유일값Secret Key API 호출 시에 인증을 위한 필수값
- 보안상의 이유로*
로 표기되며, [보기] 아이콘을 클릭하여 확인 가능주의
Service ID와 Secret Key 정보가 외부로 유출될 경우에는 해킹 등 악용의 소지가 발생할 수 있으므로 코드 저장소에 노출되지 않도록 주의하시기 바랍니다.
프로젝트 생성하기
Xcode에서 새로운 프로젝트를 생성하고, 필요한 설정을 진행합니다.
-
Xcode에서 프로젝트를 생성 후, Build Settings에서 Enable Bitcode을 No로 설정합니다.
- Objective-C 환경에서는 Always Embed Swift Standard Libraries를 Yes로 설정합니다.
-
Info.plist에서 Privacy - Microphone, Camera, Bluetooth 항목을 추가 또는 허용으로 변경합니다.
SDK 설치하기
CocoaPods을 통해 간편하게 SDK를 설치할 수 있습니다.
-
터미널 창을 열고 다음의 명령어를 실행하여 CocoaPods을 설치합니다.
- 이미 CocoaPods가 설치되어 있는 경우에는 2번 작업부터 시작하시기 바랍니다.
코드예제CocoaPods 설치
sudo gem install cocoapods
-
터미널 창에 다음의 명령을 실행하여 프로젝트의 Podfile을 생성합니다.
코드예제Podfile 생성
pod init
-
생성된 Podfile에 다음과 같이
pod ‘RemoteMonster', ‘~> 2.7.17’
을 추가합니다.코드예제pod 추가
target '[프로젝트명]' do use_frameworks! pod 'RemoteMonster', '~> 2.7.17' // Kakao i Connective Live SDK를 추가 end
-
터미널 창에 다음 명령을 실행하여 SDK를 설치합니다.
pod install
이 동작하지 않을 경우,pod update
를 먼저 실행하시기 바랍니다.
코드예제SDK 설치
pod install
- 업데이트가 정상적으로 이루어지지 않을 경우, CocoaPods의 로컬 저장소를 먼저 업데이트 후 시도하시기 바랍니다.
코드예제pod 업데이트
pod repo update pod update
iOS SDK 개발
사전 작업을 완료 후, 레이아웃을 등록과 SDK 개발을 시작합니다.
SDK 초기화 및 레이아웃 등록하기
방송과 통화 모두 음성 전용이 아니라면, 화면에 자신의 카메라 화면이나 상대방의 화면을 표시해야 합니다.
레이아웃은 Inteface Builder를 사용하거나 코드를 작성하여 등록할 수 있습니다.
Interface Builder 사용
RemonCast와 RemonCall 객체는 RemonClient
(SDK 2.6.9 이하 버전은 RemonIBController
)를 상속받은 객체이며, RemonClient는 InterfaceBuilder를 이용한 설정이 가능하도록 구성되어 있습니다. RemonCall이나 RemonCast 객체를 Designer에 삽입할 수 없으므로 Library에서 Object 컴포넌트로 먼저 삽입 후 해당 Object의 Class와 Module을 직접 수정합니다.
-
스토리보드(Storyboard)에
RemonClient
의 하위 객체인 RemonCall(일대일 통화) 또는 RemonCast(방송)를 추가합니다. -
RemonCall(일대일 통화) 또는 RemonCast(방송) 오브젝트 선택 시 표시되는 Attributes Inspector 창에서 Service ID와 Service Key 정보를 입력합니다.
- Service ID와 Service Key의 발급 방법은 서비스 고유 정보 발급받기를 참고하시기 바랍니다.
-
원하는 Scene을 선택 후 원하는 위치에 Local View와 Remote Veiw를 배치하고 바인딩합니다.
- RemonCall 또는 RemonCast의
remoteView
와localView
에 각각 바인딩합니다. - RemonCast의 경우 Caller는 localView에 바인딩하고, Callee는 remoteView에 바인딩합니다.
- RemonCall 또는 RemonCast의
-
SDK를 사용하는
ViewController
에RemoteMonster
를 Import하고,RemonClient(sdk 2.6.9 이하는 RemonIBController)
객체를 아웃렛(Outlet) 변수에 바인딩합니다.
코드로 등록
-
SDK를 사용하는 ViewController 클래스에 RemoteMonster를 Import합니다.
코드예제RemoteMonster 임포트
import RemoteMonster
-
코드에 RemonCall(일대일 통화) 또는 RemonCast(방송) 객체를 생성합니다.
코드예제레이아웃 객체 생성
let remonCall = RemonCall() // 일대일 통화 let remonCast = RemonCast() // 방송
-
콘솔에서 획득한 서비스 고유 정보(Service ID와 Service Key)를 설정합니다.
코드예제레이아웃 서비스 고유 정보 설정
// 일대일 통화인 경우 remonCall.serviceId = {SERVICE_ID} // 콘솔에서 획득한 Service ID remonCall.serviceKey = {SERVICE_KEY} // 콘솔에서 획득한 Service Key // 방송인 경우 remonCast.serviceId = {SERVICE_ID} // 콘솔에서 획득한 Service ID remonCast.serviceKey = {SERVICE_KEY} // 콘솔에서 획득한 Service Key
-
일대일 통화 또는 방송에 따라 자신의 화면을 볼 수 있는 Local View와 상대방의 화면을 볼 수 있는 Remote View를 설정합니다.
- 방송에서는 Caster는 Local View만 사용하며, Viewer는 Remote View만 사용합니다.
코드예제View(뷰) 설정
// 일대일 통화인 경우 remonCall.localView = view-reference remonCall.remoteView = view-reference // 방송인 경우 remonCast.localView = view-reference remonCast.remoteView = view-reference
서비스 개발하기
서비스 개발 프로세스는 일대일 통화, 방송, 그룹 통화 서비스에 따라 구분됩니다.
일대일 통화
RemonCall 클래스를 사용하여 일대일 통화 기능을 쉽고 빠르게 만들 수 있습니다. 일대일 통화 기능은 항상 두 명만 참여할 수 있으며, 일대일 통화방의 이름은 해당 Channel ID로 생성됩니다.
그림iOS 일대일 통화 서비스 개발 프로세스
프로세스 | 구분 | 행위자 | 설명 |
---|---|---|---|
View 등록 | 필수 |
All |
통화 중 자신과 상대방을 확인할 수 있는 View(뷰)를 등록 |
SDK 초기화 | 필수 |
All |
객체 생성과 서비스 고유 정보(Service ID와 Service Key) 설정을 포함한 SDK 초기화 수행 |
Callback 구현 | 선택 |
All |
SDK 초기화 또는 통화 시작/종료와 같은 이벤트 상태 확인을 위해 Callback 구현 |
채널 목록 조회 구현 | 선택 |
All |
fetchCalls() 메서드를 사용하여 통화방에 입장하기 위한 채널(통화) 목록 조회 - Caller와 Callee가 Channel ID를 공유 |
통화 걸기 구현 | 필수 |
Caller |
connect() 메서드를 이용하여 Caller의 통화 걸기 기능 구현 |
통화 받기 구현 | 필수 |
Callee |
connect() 메서드를 이용하여 Callee의 통화 받기 기능 구현 |
통화 종료 구현 | 필수 |
All |
closeRemon() 메서드를 사용하여 통화 종료 기능 구현 |
-
SDK를 사용하는 ViewController 클래스에 RemoteMonster를 Import합니다.
코드예제일대일 통화 RemoteMonster 임포트
import RemoteMonster
-
RemonCall 객체를 생성합니다.
코드예제일대일 통화 객체 생성
let remonCall = RemonCall() // 일대일 통화 객체 생성
-
콘솔에서 획득한 서비스 고유 정보(Service ID와 Service Key)를 설정합니다.
코드예제일대일 통화 서비스 고유 정보 설정
remonCall.serviceId = "{SERVICE_ID}" // 콘솔에서 획득한 Service ID remonCall.serviceKey = "{SERVICE_KEY}" // 콘솔에서 획득한 Service Key
안내
서비스 고유 정보를 발급받는 자세한 설명은 서비스 고유 정보 발급받기를 참고하시기 바랍니다. -
일대일 통화 중 자신의 화면을 볼 수 있는 Local View와 상대방의 화면을 볼 수 있는 Remote View를 등록합니다.
- iOS에서 View는 RemonConfig에서 제공하지 않으므로, RemonCall와 RemonCast 객체에 직접 지정해야 합니다.
코드예제일대일 통화 View 등록
let remoteView = UIView() let localView = UIView() . . . remonCall.remoteView = remoteView // 상대방의 화면 remonCall.localView = localView // 나의 화면
-
SDK 초기화 또는 통화 시작/종료와 같은 이벤트가 발생했거나 특정 시점에 도달했을 때, 시스템에서 호출할 수 있는 Callback 메서드를 구현합니다.
- iOS 2.6.9 버전부터 Callback은 모두 UI Thread에서 호출됩니다.
코드예제일대일 통화 Callback 메서드 구현
remonCall.onInit { [weak self](token) in ... // UI 처리 등 SDK 초기화 시 처리하여야 할 작업 } remonCall.onConnect { [weak self](channelId) in ... // 해당 Channel ID로 생성된 채널이 없다면 다른 사용자가 해당 Channel ID로 연결을 시도할 때까지 대기 상태가 됨 } remonCall.onComplete { [weak self] in ... // Caller와 Callee가 정상적으로 연결되어 통화 시작 } remonCast.onClose { [weak self](closeType) in ... // 종료 }
안내
Callback 메서드에 대한 자세한 설명은 Callback 문서를 참고하시기 바랍니다. -
랜덤 채팅 등과 같은 서비스에서 전체 통화 목록 정보를 조회할 수 있도록, 채널(통화) 목록 조회 기능을 구현합니다.
코드예제채널(통화) 목록 조회 기능 구현
remonCall.fetchCalls { channels in ... // 각 채널의 데이터가 배열로 전달되며, 배열의 각 항목에서 Channel ID를 가져올 수 있음 ... // channels.map { $0.chId } }
-
connect() 메서드에 Channel ID를 전달하여 Caller가 통화 걸기를 시도하는 기능을 구현합니다. 해당 Channel ID의 채널이 존재하지 않을 경우에만 해당 Channel ID의 이름으로 신규 채널이 생성됩니다.
- 필요 시, onConnect() Callback 메서드를 구현하여 통화 연결 완료에 대한 이벤트를 추적할 수 있습니다.
- 채널이 생성되면 Caller는 해당 채널에 연결을 기다리는 대기 상태가 되며, Callee가 해당 Channel ID로 연결을 시도하면 일대일 통화가 시작됩니다.
- Remon 샘플 페이지에서 iOS 앱과 통화 테스트를 할 수 있습니다.
구분 설명 Channel ID 채널을 식별하는 수단
- Caller가 채널에 연결한 시각부터 Caller 또는 Callee 중 어느 한 쪽이 연결을 해제한 시각까지 유효
- 개발자가 직접 지정해서 사용 가능하며, 미지정시에는 임의로 생성됨
- 과금은 Caller와 Callee가 실제 연결되어 통화가 이루어진 시간을 기준으로 책정생성 규칙
- 영문 기준 최소 4자 ~ 최대 1,024자 까지 허용
- 특수문자(:
,;
,*
,$
,`
등)와 한글 사용 금지코드예제일대일 통화 걸기
remonCall.connect("{CHANNEL_ID}")
-
connect() 메서드에 일대일 통화를 원하는 Channel ID를 입력하여 Callee의 통화 받기 기능을 구현합니다.
- 필요 시, onComplete() Callback 메서드를 구현하여 Caller와 Callee 간 일대일 통화가 정상적으로 연결되었는지 추적할 수 있습니다.
코드예제일대일 통화 받기
callee.connect("{CHANNEL_ID}")
-
closeRemon() 메서드를 사용하여 통화 종료 기능을 구현합니다. closeRemon() 메서드 호출 시 모든 통신 자원과 미디어 스트림 자원이 해제됩니다.
- 필요 시, onClose() Callback 메서드를 구현하여 통화가 정상적으로 종료되었는지 추적할 수 있습니다.
코드예제일대일 통화 종료
remonCall.closeRemon()
방송
RemonCast 클래스의 사용하여 1:N 방송 기능을 쉽고 빠르게 구현할 수 있습니다.
그림iOS 방송 서비스 개발 프로세스
프로세스 | 구분 | 행위자 | 설명 |
---|---|---|---|
SDK 초기화 | 필수 |
All |
SDK 초기화 수행 - 객체 생성 및 서비스 고유 정보(Service ID와 Service Key) 설정 등 |
View 등록 | 선택 |
All |
방송 중 송신/수신 화면을 확인하기 위한 View(뷰)를 등록 |
Callback 구현 | 선택 |
All |
SDK 초기화 또는 통화 시작/종료와 같은 이벤트 상태 확인을 위해 Callback 구현 |
방송 목록 조회 구현 | 선택 |
Viewer |
fetchCalls() 메서드를 이용하여 생성된 방송 목록을 조회 |
방송 생성 및 송출 구현 | 필수 |
Caster |
create() 메서드를 이용하여 Caster가 방송을 생성하고 송출 |
방송 시청 구현 | 필수 |
Viewer |
connect() 통화 채널 연결 |
방송 종료 구현 | 필수 |
All |
closeRemon() 통화 종료 및 리소스 해제 |
-
SDK를 사용하는
ViewController
클래스에RemoteMonster
를 Import합니다.코드예제방송 RemoteMonster 임포트
import RemoteMonster
-
코드에 RemonCast 객체를 생성합니다.
코드예제방송 객체 생성
let remonCast = RemonCast() // 방송
-
콘솔에서 획득한 서비스 고유 정보(Service ID와 Service Key)를 설정합니다.
코드예제방송 서비스 고유 정보 설정
remonCast.serviceId = "{SERVICE_ID}" // 콘솔에서 획득한 Service ID remonCast.serviceKey = "{SERVICE_KEY}" // 콘솔에서 획득한 Service Key
-
방송 중 자신의 화면을 볼 수 있는 Local View와 상대방의 화면을 볼 수 있는 Remote View를 등록합니다. iOS에서 View는 RemonConfig 에서 제공하지 않으므로, RemonCall, RemonCast 객체에 직접 지정해야 합니다.
코드예제방송 View 등록
let remoteView = UIView() let localView = UIView() . . . remonCast.remoteView = remoteView // 상대방의 화면(방송 수신) remonCast.localView = localView // 나의 화면(방송 송출)
-
방송 시작/종료와 같은 이벤트 또는 알림/정보 이벤트를 수신할 수 있는 Callback 메서드를 구현합니다.
- iOS 2.6.9 버전부터 Callback은 모두 UI 쓰레드에서 호출됩니다.
코드예제방송 Callback 메서드 구현
remonCast.onInit { [weak self] in ... // UI 처리 등 remon이 초기화 되었을 때 처리하여야 할 작업 } remonCast.onCreate { [weak self](channelId) in ... // 방송을 위한 Channel ID가 전달되며, Viewer는 이 Channel ID를 통해 방송에 접속 } remonCast.onJoin { [weak self] in } remonCast.onComplete { [weak self] in ... // Caster와 Viewer 간 방송 시작 } remonCast.onClose { [weak self](closeType) in ... // 방송 종료 }
-
Viewer가 방송에 접근할 수 있도록, 전체 방송 목록을 조회하는 기능을 구현합니다.
코드예제방송 목록 조회
remonCast.fetchCasts { channels in ... // 각 채널의 데이터가 배열로 전달되며, 배열의 각 항목에서 Channel ID를 가져올 수 있음 ... // channels.map { $0.chId } }
-
RemonCast의 create() 메서드를 이용하여 방송을 생성할 수 있습니다. create() 메서드가 호출되면 Kakao i Connect Live의 미디어 서버에 다른 사용자들이 접속할 수 있는 방송이 채널이 생성됩니다. 이때 Channel ID가 반환되며, 이를 통해 Viewer가 접근할 수 있습니다.
- Channel ID는 채널을 식별하는 고유한 값으로 생성 규칙을 참고하여 개발자가 직접 지정할 수 있으며, 만약 지정하지 않는다면 임의로 생성됩니다.
- Channel ID는 Caster가 명시적으로 채널을 생성하는 시각부터 채널을 종료하는 시각까지 유효합니다. Caster가 영상을 송출하지 않고 채널을 생성만 해도 유효합니다. 유효한 채널이 생성되면 Viewer는 해당 채널에 입장할 수 있습니다.
- Remon 샘플 페이지에서 iOS 앱과 통화 테스트를 할 수 있습니다.
구분 설명 Channel ID 채널을 식별하는 수단
- Caller가 채널에 연결한 시각부터 Caller 또는 Callee 중 어느 한 쪽이 연결을 해제한 시각까지 유효
- 개발자가 직접 지정해서 사용 가능하며, 미지정시에는 임의로 생성됨
- 과금은 Caller와 Callee가 실제 연결되어 통화가 이루어진 시간을 기준으로 책정생성 규칙
- 영문 기준 최소 4자 ~ 최대 1,024자 까지 허용
- 특수문자(:
,;
,*
,$
,`
등)와 한글 사용 금지코드예제방송 생성
// Channel ID 미 지정 시, 시스템에서 자동으로 Channel ID를 생성 remonCast.create()
-
RemonCast의 join() 메서드를 사용하여 Viewer가 방송에 참여하는 기능을 구현합니다.
- Viewer는 Caster가 방송 생성 시에 생성한 Channel ID 또는 전체 방송 목록에서 참여할 방송의 Channel ID를 얻어 방송에 참여할 수 있습니다.
- SDK는 별도의 사용자 정보나 서비스 정보를 가지고 있지 않으므로, 각 서비스의 시나리오에 따라 서비스에서 사용하는 방식으로 Channel ID를 교환해야 합니다.
코드예제방송 참여
remonCast.join(chId: "{CHANNEL_ID}")
-
방송 송출 또는 시청이 끝났을 경우 closeRemon() 메서드를 호출하여 방송을 종료합니다. closeRemon() 메서드 호출 시, 모든 방송 자원과 미디어 스트림 자원이 해제됩니다.
- 필요 시, onComplete() Callback 메서드를 구현하여 일대일 통화가 정상적으로 연결되었는지 추적할 수 있습니다.
코드예제방송 종료
remonCast.closeRemon()
그룹 통화
RemonConference 클래스를 사용하여 다수의 참여자가 통화에 참여하는 그룹 통화 서비스를 쉽고 빠르게 구현할 수 있습니다. 참여자는 애플리케이션을 이용하는 ‘나’와 나를 제외한 ‘참여자’로 구분됩니다. 한 회기의 그룹 통화는 RemonConference 클래스의 인스턴스로 대표되며, 통화 연결과 참여자들의 입장/퇴장 알림 등 대부분의 이벤트를 RemonConference 객체에게 위임합니다. 그룹 통화 서비스의 개발 방법은 다음과 같습니다.
그림iOS 그룹 통화 서비스 개발 프로세스
프로세스 | 구분 | 행위자 | 설명 |
---|---|---|---|
SDK 초기화 | 필수 |
All |
SDK 초기화 수행 - 객체 생성 및 서비스 고유 정보(Service ID와 Service Key) 설정 등 |
방 생성, 참여, 로컬 뷰(Local View) 등록 | 필수 |
All |
create() 메서드를 이용하여 그룹 통화를 위한 방을 생성하거나 이미 생성된 방에 참여, 자신의 화면을 표시하기 위해 Local View 설정 |
Room Callback 구현 | 필수 |
All |
그룹 통화 초기화, 시작, 종료와 같은 이벤트 상태 확인을 위한 Room 관련 Callback 구현 |
참여자 Callback 구현 | 필수 |
All |
사용자 참여, 퇴장, 변경 등 이벤트 확인을 위해 참여자 관련 Callback 구현 |
참여자 View 등록 | 필수 |
All |
참여자의 화면을 표시하기 위해 Remote View 설정 |
그룹 통화 종료 구현 | 필수 |
All |
leave() 메서드를 이용하여 방송 송신 및 수신 종료 |
-
SDK를 사용하는
ViewController
클래스에RemoteMonster
를 Import합니다.코드예제그룹 통화 RemoteMonster 임포트
import RemoteMonster
-
RemonConference 객체를 생성합니다.
코드예제그룹 통화 객체 생성
let remonConference = RemonConference()
-
RemonConfig를 통해 콘솔에서 획득한 서비스 고유 정보(Service ID와 Service Key)를 설정합니다.
코드예제그룹 통화 서비스 고유 정보 설정
var remonConfig = RemonConfig() remonConfig.serviceId = "{SERVICE_ID}" // 콘솔에서 획득한 Service ID remonConfig.serviceKey = "{SERVICE_KEY}" // 콘솔에서 획득한 Service Key
-
그룹 통화를 위한 통화방을 생성하고, 미디어 송출을 위한 RemonParticipant 설정 클로저를 구성합니다.
코드예제통화방 생성
remonConference.create(roomName: "{ROOM_NAME}", config: remonConfig) { participant in ... // 방 생성 후 미디어 송출을 위한 participant 객체가 전달되며, 초기화가 진행 ... // participant 객체는 방송의 RemonCast와 비슷한 객체로, 미디어 설정이나 사용자별 Callback을 등록하여 이벤트를 수신 }
-
create() 메서드의 마지막 인자인 클로저에 자신의 RemonParticipant 객체가 전달되므로, 그룹 통화 중 자신의 화면을 볼 수 있는 Local View를 설정합니다.
- 그룹 통화는 상대방의 수와 접속 시점이 정해지지 않고 동적으로 변화하므로, Local View(자신의 화면)와 Remote View(상대방의 화면)를 별도 Callback에서 등록해야 합니다.
코드예제그룹 통화 Local View 설정
let localView = UIView( . . . remonConference.create(roomName: "{ROOM_NAME}", config: remonConfig) { [weak self] participant in guard let self = self else { return } participant.localView = self.localView }
-
그룹 통화의 통화방 생성, 참여자 참여, 퇴장 등 이벤트를 추적하기를 원할 경우에는 그룹 통화방(Room)과 관련된 Callback 메서드를 구현합니다. create() 메서드에 필요한 Callback을 연결하는 형태로 구성합니다.
코드예제그룹 통화 Callback 메서드 구현
remonConference.create( roomName: "{ROOM_NAME}", config: config) { }.close { }.error { error in }.on( event: .onRoomCreated) { participant in ... // 그룹 통화 방(Room) 생성 시 호출되며, 실제 해당 그룹 통화로 송출이 진행되고 있는 상태 ... // participant는 스트림 데이터이며, 실제 사용자 정보는 각 서비스에서 관리 ... // 서비스에서 participant와 서비스의 내부 사용자 정보는 각 서비스에서 구현하여 매핑 }.on( event: .onUserJoined) { participant in ... // 다른 사용자가 그룹 통화에 참여 시 호출되며, 해당 사용자 정보가 participant로 전달 }.on( event: .onUserStreamConnected) { participant in ... // 특정 참여자가 송출을 시작하면 호출 }.on( event: .onUserLeft) { participant in ... // 그룹 통화 참여자가 퇴장하면 호출 }
-
그룹 통화에서 나 자신의 시작, 종료, 오류 이벤트를 수신할 수 있는 참여자 관련 Callback 메서드를 구현합니다. create() 메서드에 Callback을 연결하는 형태로 구성합니다.
코드예제그룹 통화 이벤트 수신
remonConference.create( roomName: "{ROOM_NAME}", config: config) { participant in }.close { ... // 나 자신의 채널 종료 이벤트로, 다른 사용자와의 연결도 모두 끊어짐 }.error { error in ... // 나 자신의 채널에서 에러 발생 시 호출되며, 에러로 연결이 종료되면 error -> close 순으로 호출됨 }
-
그룹 통화 중 참여자의 화면을 볼 수 있도록, Callback 메서드 중
.on( eventName: “onUserJoined”)
에서 전달되는 RemonParticipant 객체에 참여자 화면(Remote View)을 설정합니다.- SDK는 서비스에서 사용하는 실제 사용자 정보를 알지 못하므로, RemonParticipant와 각 서비스에서 사용할 실제 사용자 정보와의 매칭은 각 서비스에서 진행해야 합니다. RemonParticipant의 tag 프로퍼티를 사용해 원하는 식별자를 지정할 수 있습니다.
코드예제그룹 통화 참여자 화면(Remote View) 설정
let remoteView1 = UIView( ... remonConference.create(roomName: "{ROOM_NAME}", config: remonConfig) { ... }.on( event: .onUserJoined) { [weak self] participant in guard let self = self else { return } participant.tag = "{원하는 식별자}" participant.remoteView = self.remoteView1 }
RemonParticipant 란?
그룹 통화는 하나의 방송 송출과 여러개의 방송 수신이 하나의 그룹으로 구성되어 있습니다. RemonParticipant는 각 방송의 송출과 수신을 담당하는 객체입니다. RemonParticipant는 별도로 생성되지 않고, 룸의 각 이벤트 Callback마다 해당하는 RemonParticipant 객체가 전달됩니다. RemonParticipant는 RemonClient를 상속받은 객체이므로, RemonCast의 송출/수신 기능과 대부분 동일합니다. 송출하고 있는 스트림을 제어하기 위해 서비스에서 자신을 얻어올 필요가 있을때 그룹 통화 객체에서 바로 자신의 정보를 얻을 수 있습니다.코드예제자신의 RemonParticipant 정보 획득
participant: RemonParticipant = remonConference.me
안내
RemonParticipant 객체는 RemonClient를 상속받은 객체입니다. RemonCast처럼 onCreate(), onClose(), onError() Callback 메서드를 지정할 수 있으며, 그룹 통화에서는 해당 Callback들이 별도로 관리 및 처리되고 있습니다.- Callback이 필요한 경우에는
.on(event: “”) { }
형식을 사용합니다.
-
leave() 메서드를 사용하여 그룹 통화 종료 기능을 구현합니다. leave() 메서드 호출 시, 나와 참여자들 간의 연결도 종료됩니다.
코드예제그룹 통화 종료
remonConference.leave()
관련 문서
Android SDK Kakao i Connect Live iOS SDK Kakao i Connect Live Web SDK Kakao i Connect Live