Kakao i Connect Live::Kakao i Connect Live 1.0::Connect Live SDK::iOS SDK

페이지 이동경로

SDK 개발 프로세스

iOS 환경에서 Kakao i Connect Live SDK를 사용하여 일대일 통화(Live Call), 방송(Live Cast), 그룹 통화(Live Conference) 기능을 구현하는 프로세스는 다음과 같습니다.

iOS SDK 개발 프로세스 그림iOS SDK 개발 프로세스

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를 각각 발급받아야 합니다.

  1. Kakao i Connect live 홈페이지에서 [Console] 버튼을 클릭한 후, 회원가입을 진행합니다.

    • 입력한 이메일 주소로 임시 비밀번호가 발송되며, 로그인 후 비밀번호 변경이 필요합니다.
  2. [새 프로젝트 추가] 버튼을 클릭하여 새로운 프로젝트를 생성합니다.

  3. 해당 프로젝트에서 사용할 서비스 고유 정보인 Service ID와 Secret Key를 확인합니다. 서비스 고유 정보

    구분 설명
    Service ID 프로젝트 생성 시 자동으로 생성되는 ID
    - 서비스 구분에 활용되는 유일값
    Secret Key API 호출 시에 인증을 위한 필수값
    - 보안상의 이유로 *로 표기되며, [보기] 아이콘을 클릭하여 확인 가능
    주의
    Service ID와 Secret Key 정보가 외부로 유출될 경우에는 해킹 등 악용의 소지가 발생할 수 있으므로 코드 저장소에 노출되지 않도록 주의하시기 바랍니다.

프로젝트 생성하기

Xcode에서 새로운 프로젝트를 생성하고, 필요한 설정을 진행합니다.

  1. Xcode에서 프로젝트를 생성 후, Build Settings에서 Enable BitcodeNo로 설정합니다.

    • Objective-C 환경에서는 Always Embed Swift Standard LibrariesYes로 설정합니다.
  2. Info.plist에서 Privacy - Microphone, Camera, Bluetooth 항목을 추가 또는 허용으로 변경합니다.

SDK 설치하기

CocoaPods을 통해 간편하게 SDK를 설치할 수 있습니다.

  1. 터미널 창을 열고 다음의 명령어를 실행하여 CocoaPods을 설치합니다.

    • 이미 CocoaPods가 설치되어 있는 경우에는 2번 작업부터 시작하시기 바랍니다.

    코드예제CocoaPods 설치

    sudo gem install cocoapods
    

  2. 터미널 창에 다음의 명령을 실행하여 프로젝트의 Podfile을 생성합니다.

    코드예제Podfile 생성

    pod init
    

  3. 생성된 Podfile에 다음과 같이 pod ‘RemoteMonster', ‘~> 2.7.17’을 추가합니다.

    코드예제pod 추가

    target '[프로젝트명]' do
      use_frameworks!
      pod 'RemoteMonster', '~> 2.7.17' // Kakao i Connective Live SDK를 추가
    end
    

  4. 터미널 창에 다음 명령을 실행하여 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을 직접 수정합니다.

  1. 스토리보드(Storyboard)에 RemonClient의 하위 객체인 RemonCall(일대일 통화) 또는 RemonCast(방송)를 추가합니다.

  2. RemonCall(일대일 통화) 또는 RemonCast(방송) 오브젝트 선택 시 표시되는 Attributes Inspector 창에서 Service ID와 Service Key 정보를 입력합니다.

  3. 원하는 Scene을 선택 후 원하는 위치에 Local View와 Remote Veiw를 배치하고 바인딩합니다.

    • RemonCall 또는 RemonCast의 remoteViewlocalView에 각각 바인딩합니다.
    • RemonCast의 경우 Caller는 localView에 바인딩하고, Callee는 remoteView에 바인딩합니다.
  4. SDK를 사용하는 ViewControllerRemoteMonster를 Import하고, RemonClient(sdk 2.6.9 이하는 RemonIBController)객체를 아웃렛(Outlet) 변수에 바인딩합니다.

코드로 등록

  1. SDK를 사용하는 ViewController 클래스에 RemoteMonster를 Import합니다.

    코드예제RemoteMonster 임포트

    import RemoteMonster
    

  2. 코드에 RemonCall(일대일 통화) 또는 RemonCast(방송) 객체를 생성합니다.

    코드예제레이아웃 객체 생성

    let remonCall = RemonCall() // 일대일 통화
    let remonCast = RemonCast() // 방송
    

  3. 콘솔에서 획득한 서비스 고유 정보(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
    

  4. 일대일 통화 또는 방송에 따라 자신의 화면을 볼 수 있는 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 일대일 통화 서비스 개발 프로세스 그림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() 메서드를 사용하여 통화 종료 기능 구현
  1. SDK를 사용하는 ViewController 클래스에 RemoteMonster를 Import합니다.

    코드예제일대일 통화 RemoteMonster 임포트

    import RemoteMonster
    

  2. RemonCall 객체를 생성합니다.

    코드예제일대일 통화 객체 생성

    let remonCall = RemonCall() // 일대일 통화 객체 생성
    

  3. 콘솔에서 획득한 서비스 고유 정보(Service ID와 Service Key)를 설정합니다.

    코드예제일대일 통화 서비스 고유 정보 설정

    remonCall.serviceId = "{SERVICE_ID}" // 콘솔에서 획득한 Service ID 
    remonCall.serviceKey = "{SERVICE_KEY}" // 콘솔에서 획득한 Service Key
    

    안내
    서비스 고유 정보를 발급받는 자세한 설명은 서비스 고유 정보 발급받기를 참고하시기 바랍니다.
  4. 일대일 통화 중 자신의 화면을 볼 수 있는 Local View와 상대방의 화면을 볼 수 있는 Remote View를 등록합니다.

    • iOS에서 View는 RemonConfig에서 제공하지 않으므로, RemonCall와 RemonCast 객체에 직접 지정해야 합니다.

    코드예제일대일 통화 View 등록

    let remoteView = UIView()
    let localView = UIView()
        .
        .
        .
    remonCall.remoteView = remoteView // 상대방의 화면
    remonCall.localView = localView // 나의 화면
    

  5. 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 문서를 참고하시기 바랍니다.
  6. 랜덤 채팅 등과 같은 서비스에서 전체 통화 목록 정보를 조회할 수 있도록, 채널(통화) 목록 조회 기능을 구현합니다.

    코드예제채널(통화) 목록 조회 기능 구현

    remonCall.fetchCalls { channels in
        ... // 각 채널의 데이터가 배열로 전달되며, 배열의 각 항목에서 Channel ID를 가져올 수 있음
        ... // channels.map { $0.chId }  
    }
    

  7. connect() 메서드에 Channel ID를 전달하여 Caller가 통화 걸기를 시도하는 기능을 구현합니다. 해당 Channel ID의 채널이 존재하지 않을 경우에만 해당 Channel ID의 이름으로 신규 채널이 생성됩니다.

    • 필요 시, onConnect() Callback 메서드를 구현하여 통화 연결 완료에 대한 이벤트를 추적할 수 있습니다.
    • 채널이 생성되면 Caller는 해당 채널에 연결을 기다리는 대기 상태가 되며, Callee가 해당 Channel ID로 연결을 시도하면 일대일 통화가 시작됩니다.
    • Remon 샘플 페이지에서 iOS 앱과 통화 테스트를 할 수 있습니다.
    Channel ID
    구분 설명
    Channel ID 채널을 식별하는 수단
    - Caller가 채널에 연결한 시각부터 Caller 또는 Callee 중 어느 한 쪽이 연결을 해제한 시각까지 유효
    - 개발자가 직접 지정해서 사용 가능하며, 미지정시에는 임의로 생성됨
    - 과금은 Caller와 Callee가 실제 연결되어 통화가 이루어진 시간을 기준으로 책정
    생성 규칙
    - 영문 기준 최소 4자 ~ 최대 1,024자 까지 허용
    - 특수문자(:, ;, *, $, ` 등)와 한글 사용 금지

    코드예제일대일 통화 걸기

    remonCall.connect("{CHANNEL_ID}")
    

  8. connect() 메서드에 일대일 통화를 원하는 Channel ID를 입력하여 Callee의 통화 받기 기능을 구현합니다.

    • 필요 시, onComplete() Callback 메서드를 구현하여 Caller와 Callee 간 일대일 통화가 정상적으로 연결되었는지 추적할 수 있습니다.

    코드예제일대일 통화 받기

    callee.connect("{CHANNEL_ID}")
    

  9. closeRemon() 메서드를 사용하여 통화 종료 기능을 구현합니다. closeRemon() 메서드 호출 시 모든 통신 자원과 미디어 스트림 자원이 해제됩니다.

    • 필요 시, onClose() Callback 메서드를 구현하여 통화가 정상적으로 종료되었는지 추적할 수 있습니다.

    코드예제일대일 통화 종료

    remonCall.closeRemon()
    

방송

RemonCast 클래스의 사용하여 1:N 방송 기능을 쉽고 빠르게 구현할 수 있습니다.

iOS 방송 서비스 개발 프로세스 그림iOS 방송 서비스 개발 프로세스

방송 서비스 개발 프로세스
프로세스 구분 행위자 설명
SDK 초기화 필수 All SDK 초기화 수행
- 객체 생성 및 서비스 고유 정보(Service ID와 Service Key) 설정 등
View 등록 선택 All 방송 중 송신/수신 화면을 확인하기 위한 View(뷰)를 등록
Callback 구현 선택 All SDK 초기화 또는 통화 시작/종료와 같은 이벤트 상태 확인을 위해 Callback 구현
방송 목록 조회 구현 선택 Viewer fetchCalls() 메서드를 이용하여 생성된 방송 목록을 조회
방송 생성 및 송출 구현 필수 Caster create() 메서드를 이용하여 Caster가 방송을 생성하고 송출
방송 시청 구현 필수 Viewer connect() 통화 채널 연결
방송 종료 구현 필수 All closeRemon() 통화 종료 및 리소스 해제
  1. SDK를 사용하는 ViewController 클래스에 RemoteMonster를 Import합니다.

    코드예제방송 RemoteMonster 임포트

    import RemoteMonster
    

  2. 코드에 RemonCast 객체를 생성합니다.

    코드예제방송 객체 생성

    let remonCast = RemonCast() // 방송
    

  3. 콘솔에서 획득한 서비스 고유 정보(Service ID와 Service Key)를 설정합니다.

    코드예제방송 서비스 고유 정보 설정

    remonCast.serviceId = "{SERVICE_ID}" // 콘솔에서 획득한 Service ID 
    remonCast.serviceKey = "{SERVICE_KEY}" // 콘솔에서 획득한 Service Key
    

  4. 방송 중 자신의 화면을 볼 수 있는 Local View와 상대방의 화면을 볼 수 있는 Remote View를 등록합니다. iOS에서 View는 RemonConfig 에서 제공하지 않으므로, RemonCall, RemonCast 객체에 직접 지정해야 합니다.

    코드예제방송 View 등록

    let remoteView = UIView()
    let localView = UIView()
     .
     .
     .
    remonCast.remoteView = remoteView // 상대방의 화면(방송 수신)
    remonCast.localView = localView // 나의 화면(방송 송출)
    

  5. 방송 시작/종료와 같은 이벤트 또는 알림/정보 이벤트를 수신할 수 있는 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
    ... // 방송 종료
    }
    

  6. Viewer가 방송에 접근할 수 있도록, 전체 방송 목록을 조회하는 기능을 구현합니다.

    코드예제방송 목록 조회

    remonCast.fetchCasts { channels in
       ... // 각 채널의 데이터가 배열로 전달되며, 배열의 각 항목에서 Channel ID를 가져올 수 있음
       ... // channels.map { $0.chId }  
    }
    

  7. RemonCast의 create() 메서드를 이용하여 방송을 생성할 수 있습니다. create() 메서드가 호출되면 Kakao i Connect Live의 미디어 서버에 다른 사용자들이 접속할 수 있는 방송이 채널이 생성됩니다. 이때 Channel ID가 반환되며, 이를 통해 Viewer가 접근할 수 있습니다.

    • Channel ID는 채널을 식별하는 고유한 값으로 생성 규칙을 참고하여 개발자가 직접 지정할 수 있으며, 만약 지정하지 않는다면 임의로 생성됩니다.
    • Channel ID는 Caster가 명시적으로 채널을 생성하는 시각부터 채널을 종료하는 시각까지 유효합니다. Caster가 영상을 송출하지 않고 채널을 생성만 해도 유효합니다. 유효한 채널이 생성되면 Viewer는 해당 채널에 입장할 수 있습니다.
    • Remon 샘플 페이지에서 iOS 앱과 통화 테스트를 할 수 있습니다.
    Channel ID
    구분 설명
    Channel ID 채널을 식별하는 수단
    - Caller가 채널에 연결한 시각부터 Caller 또는 Callee 중 어느 한 쪽이 연결을 해제한 시각까지 유효
    - 개발자가 직접 지정해서 사용 가능하며, 미지정시에는 임의로 생성됨
    - 과금은 Caller와 Callee가 실제 연결되어 통화가 이루어진 시간을 기준으로 책정
    생성 규칙
    - 영문 기준 최소 4자 ~ 최대 1,024자 까지 허용
    - 특수문자(:, ;, *, $, ` 등)와 한글 사용 금지

    코드예제방송 생성

    // Channel ID 미 지정 시, 시스템에서 자동으로 Channel ID를 생성
    remonCast.create()
    

  8. RemonCast의 join() 메서드를 사용하여 Viewer가 방송에 참여하는 기능을 구현합니다.

    • Viewer는 Caster가 방송 생성 시에 생성한 Channel ID 또는 전체 방송 목록에서 참여할 방송의 Channel ID를 얻어 방송에 참여할 수 있습니다.
    • SDK는 별도의 사용자 정보나 서비스 정보를 가지고 있지 않으므로, 각 서비스의 시나리오에 따라 서비스에서 사용하는 방식으로 Channel ID를 교환해야 합니다.

    코드예제방송 참여

    remonCast.join(chId: "{CHANNEL_ID}")
    

  9. 방송 송출 또는 시청이 끝났을 경우 closeRemon() 메서드를 호출하여 방송을 종료합니다. closeRemon() 메서드 호출 시, 모든 방송 자원과 미디어 스트림 자원이 해제됩니다.

    • 필요 시, onComplete() Callback 메서드를 구현하여 일대일 통화가 정상적으로 연결되었는지 추적할 수 있습니다.

    코드예제방송 종료

    remonCast.closeRemon()
    

그룹 통화

RemonConference 클래스를 사용하여 다수의 참여자가 통화에 참여하는 그룹 통화 서비스를 쉽고 빠르게 구현할 수 있습니다. 참여자는 애플리케이션을 이용하는 ‘나’와 나를 제외한 ‘참여자’로 구분됩니다. 한 회기의 그룹 통화는 RemonConference 클래스의 인스턴스로 대표되며, 통화 연결과 참여자들의 입장/퇴장 알림 등 대부분의 이벤트를 RemonConference 객체에게 위임합니다. 그룹 통화 서비스의 개발 방법은 다음과 같습니다.

iOS 그룹 통화 서비스 개발 프로세스 그림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() 메서드를 이용하여 방송 송신 및 수신 종료
  1. SDK를 사용하는 ViewController 클래스에 RemoteMonster를 Import합니다.

    코드예제그룹 통화 RemoteMonster 임포트

    import RemoteMonster
    

  2. RemonConference 객체를 생성합니다.

    코드예제그룹 통화 객체 생성

    let remonConference = RemonConference()
    

  3. RemonConfig를 통해 콘솔에서 획득한 서비스 고유 정보(Service ID와 Service Key)를 설정합니다.

    코드예제그룹 통화 서비스 고유 정보 설정

    var remonConfig = RemonConfig()
    remonConfig.serviceId = "{SERVICE_ID}" // 콘솔에서 획득한 Service ID 
    remonConfig.serviceKey = "{SERVICE_KEY}" // 콘솔에서 획득한 Service Key
    

  4. 그룹 통화를 위한 통화방을 생성하고, 미디어 송출을 위한 RemonParticipant 설정 클로저를 구성합니다.

    코드예제통화방 생성

    remonConference.create(roomName: "{ROOM_NAME}", config: remonConfig) {
       participant in
       ... // 방 생성 후 미디어 송출을 위한 participant 객체가 전달되며, 초기화가 진행
       ... // participant 객체는 방송의 RemonCast와 비슷한 객체로, 미디어 설정이나 사용자별 Callback을 등록하여 이벤트를 수신
    } 
    

  5. 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
    } 
    

  6. 그룹 통화의 통화방 생성, 참여자 참여, 퇴장 등 이벤트를 추적하기를 원할 경우에는 그룹 통화방(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
      ... // 그룹 통화 참여자가 퇴장하면 호출
    }
    

  7. 그룹 통화에서 나 자신의 시작, 종료, 오류 이벤트를 수신할 수 있는 참여자 관련 Callback 메서드를 구현합니다. create() 메서드에 Callback을 연결하는 형태로 구성합니다.

    코드예제그룹 통화 이벤트 수신

    remonConference.create( roomName: "{ROOM_NAME}", config: config) { 
        participant in
    }.close {
        ... // 나 자신의 채널 종료 이벤트로, 다른 사용자와의 연결도 모두 끊어짐
    }.error { 
        error in
        ... // 나 자신의 채널에서 에러 발생 시 호출되며, 에러로 연결이 종료되면 error -> close 순으로 호출됨
    }
    

  8. 그룹 통화 중 참여자의 화면을 볼 수 있도록, 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: “”) { } 형식을 사용합니다.
  9. leave() 메서드를 사용하여 그룹 통화 종료 기능을 구현합니다. leave() 메서드 호출 시, 나와 참여자들 간의 연결도 종료됩니다.

    코드예제그룹 통화 종료

    remonConference.leave()
    

관련 문서

Android SDK Kakao i Connect Live iOS SDK Kakao i Connect Live Web SDK Kakao i Connect Live

이 문서가 만족스러운 이유를 알려주세요.
이 문서에 아쉬운 점을 알려주세요.
평가해주셔서 감사합니다.

더 자세한 의견은 documentation@kakaoenterprise.com 으로 제보해주세요.