본문으로 건너뛰기
Version: 6.0

릴리스 노트

iOS/macOS용 PlanetKit 6.0의 릴리스 노트입니다.

PlanetKit 6.0

릴리스 일자: 2025-05-16

카메라 대리자 인터페이스 개선

PlanetKitVideoCaptureDeviceInfo 파라미터로 비디오 캡처 장치에 대해 더 자세한 정보를 제공하도록 PlanetKitCameraDelegate 프로토콜을 업데이트했습니다.

API

변경
  • PlanetKitCameraDelegate protocol 1-to-1 callGroup call

    이전 버전PlanetKit 6.0
    func didStart()func didStart(_ deviceInfo: PlanetKitVideoCaptureDeviceInfo)
    func didStop(_ error: NSError?)func didStop(_ deviceInfo: PlanetKitVideoCaptureDeviceInfo)
추가
  • PlanetKitCameraDelegate protocol 1-to-1 callGroup call
    • func didUpdate(_ deviceInfo: PlanetKitVideoCaptureDeviceInfo?)
    • func didFail(_ error: NSError, deviceInfo: PlanetKitVideoCaptureDeviceInfo?)

비디오 성능 설정 API 개선

비디오 성능(capability) 설정을 PlanetKitManager를 통해 하도록 변경하고, 명확한 API 네이밍으로 일관성을 개선했습니다.

  • 비디오 하드웨어 코덱 설정은 이제 각 1대1 통화 또는 그룹 통화별로 설정하는 대신 PlanetKitManager를 통해 설정됩니다.
  • 비디오 성능 설정 API에서 섬네일 해상도는 더 이상 지원하지 않습니다.

API

변경
  • PlanetKitVideoCapability class 1-to-1 callGroup call

    이전 버전PlanetKit 6.0
    var resolution: PlanetKitVideoResolutionCapability { get set }var maxResolution: PlanetKitVideoResolutionCapability { get }
    var fps: PlanetKitVideoFps { get set }var maxFps: PlanetKitVideoFps { get }
    init(resolution: PlanetKitVideoResolutionCapability, fps: PlanetKitVideoFps)init(maxResolution: PlanetKitVideoResolutionCapability, maxFps: PlanetKitVideoFps)
  • Parameter renaming 1-to-1 callGroup call

    이전 버전PlanetKit 6.0
    PlanetKitCallConnectedParam.isVideoHwCodecEnabledPlanetKitCallConnectedParam.isVideoHardwareCodecEnabled
    PlanetKitConferenceConnectedParam.isVideoHwCodecEnabledPlanetKitConferenceConnectedParam.isVideoHardwareCodecEnabled
추가
  • PlanetKitVideoResolutionCapability enum 1-to-1 callGroup call
    • case qvga - 최대 해상도 320x240
    • case vga - 최대 해상도 640x480
    • case hd - 최대 해상도 1280x960
    • case fhd - 최대 해상도 1920x1080
  • PlanetKitVideoCapabilityUsage enum 1-to-1 callGroup call
    • case callSend
    • case callReceive
    • case conferenceSend
    • case conferenceReceive
  • PlanetKitPreferredHardwareCodec class 1-to-1 callGroup call
    • var callVideoSend: Bool { get }
    • var callVideoReceive: Bool { get }
    • var conferenceVideoSend: Bool { get }
    • var conferenceVideoReceive: Bool { get }
    • init(callVideoSend: Bool, callVideoReceive: Bool, conferenceVideoSend: Bool, conferenceVideoReceive: Bool)
  • PlanetKitManager class 1-to-1 callGroup call
    • func getDeviceDefaultVideoCapability(usage: PlanetKitVideoCapabilityUsage) -> PlanetKitVideoCapability
    • func getVideoPreferredHardwareCodec() -> PlanetKitPreferredHardwareCodec
  • PlanetKitInitialSettingBuilder class 1-to-1 callGroup call
    • func withSetPreferredHardwareCodecKey(preferredHardwareCodec: PlanetKitPreferredHardwareCodec) -> PlanetKitInitialSettingBuilder
삭제
  • PlanetKitCall class 1-to-1 call
    • var myVideoSendCapability: PlanetKitVideoCapability { get }
    • var myVideoReceiveCapability: PlanetKitVideoCapability { get }
  • PlanetKitConference class Group call
    • var myVideoSendCapability: PlanetKitVideoCapability { get }
    • var myVideoRecvPreferredHwCodec: Bool { get }
  • PlanetKitVideoCapability class 1-to-1 callGroup call
    • var preferredHwCodec: Bool
    • static var callSendDefault: PlanetKitVideoCapability
    • static var callReceiveDefault: PlanetKitVideoCapability
    • static var conferenceSendDefault: PlanetKitVideoCapability
  • PlanetKitJoinConferenceSettingBuilder extension Group call
    • func withMyVideoRecvPreferredHwCodecKey(enable: Bool) -> PlanetKitJoinConferenceSettingBuilder

마이그레이션 가이드

PlanetKit 초기화 시 하드웨어 코덱 설정
  • 이전 버전

    // Configure hardware codec for specific call/conference
    let callSettings = PlanetKitMakeCallSettingBuilder()
    .withVideoSendCapabilityKey(capability: capability)
    .build()

    let conferenceSettings = PlanetKitJoinConferenceSettingBuilder()
    .withMyVideoRecvPreferredHwCodecKey(enable: true)
    .build()
  • 신규 버전

    // 1. Create hardware codec preferences
    let preferredHardwareCodec = PlanetKitPreferredHardwareCodec(
    callVideoSend: true,
    callVideoReceive: true,
    conferenceVideoSend: true,
    conferenceVideoReceive: true
    )

    // 2. Configure during initialization
    let initializeSettings = PlanetKitInitializeSettingsBuilder()
    .withSetPreferredHardwareCodecKey(preferredHardwareCodec: preferredHardwareCodec)
    .build()

    PlanetKitManager.shared.initialize(initialSettings: initializeSettings)
초기화 후 하드웨어 코덱 설정 업데이트
// 1. Create new hardware codec preferences
let preferredHardwareCodec = PlanetKitPreferredHardwareCodec(
callVideoSend: true,
callVideoReceive: true,
conferenceVideoSend: true,
conferenceVideoReceive: true
)

// 2. Update settings
let newSettings = PlanetKitInitializeSettingsBuilder()
.withSetPreferredHardwareCodecKey(preferredHardwareCodec: preferredHardwareCodec)
.build()

PlanetKitManager.shared.update(initialSettings: newSettings)
기기의 기본 비디오 성능 가져오기
// Get default capability for call sending
let callSendCapability = PlanetKitManager.shared.getDeviceDefaultVideoCapability(usage: .callSend)

// Get default capability for conference receiving
let conferenceReceiveCapability = PlanetKitManager.shared.getDeviceDefaultVideoCapability(usage: .conferenceReceive)
현재 하드웨어 코덱 설정 가져오기
let hardwareCodecSettings = PlanetKitManager.shared.getVideoPreferredHardwareCodec()
let isHardwareEnabledForCallSend = hardwareCodecSettings.callVideoSend

그룹 통화 피어의 볼륨 설정 API 개선

이전의 서브그룹 기반 볼륨 제어를 개별 피어에 대한 통합 볼륨 설정 API로 대체했습니다.

  • 6.0 이전 버전에서는 서브그룹별로 볼륨을 제어했으나, 6.0 버전부터는 서브그룹과 상관없이 볼륨을 설정할 수 있습니다.
  • 위 사양 변경에 따라 관련 API를 수정했습니다.

API

변경
  • PlanetKitConferencePeer class Group call

    이전 버전PlanetKit 6.0
    func volumeLevelSetting(subgroupName: String?) throws -> PlanetKitVolumeLevelfunc volumeLevelSetting() throws -> PlanetKitVolumeLevel
추가
  • PlanetKitConferencePeerControl class Group call
    • func setVolumeLevelSetting(_ volumeLevel: Int8, completion: @escaping (Bool)->Void)
삭제
  • PlanetKitSubgroupManager class Group call
    • func setPeerVolumeLevelSetting(_ volumeLevel: Int8, peerId: PlanetKitUserId, subgroupName: String?, allSubgroupsPeerSubscribed: Bool, completion: @escaping (Bool)->Void)

통화 중 마이크 사용 여부에 따라 마이크 장치 제어

  • 음 소거나 통화 일시 중지 등 통화 중 마이크를 사용하지 않을 때에는 PlanetKit이 마이크 장치를 끄도록 변경했습니다.
  • 오디오 관리 시스템을 개선하고자 관심사 분리(separation of concerns)를 강화하는 리팩토링을 진행했습니다.
    • PlanetKitAudioSession에서는 핵심 오디오 세션 기능을 그대로 제공합니다.
    • PlanetKitAudioManager에서 고수준 오디오 제어 기능을 제공합니다.

자세한 정보는 API 문서를 참조하세요.

알려진 문제

macOS 12 및 13에서는 통화가 음 소거되거나 일시 중지 중일 때도 마이크 표시기가 켜진 상태로 유지됩니다. 이 상태에서 상대방에게 오디오 데이터가 전송되지는 않습니다.

API

변경
  • 오디오 관리 시스템 리팩토링 1-to-1 callGroup call

    • 핵심 오디오 세션 기능은 PlanetKitAudioSession으로 이동
    • 고수준 오디오 제어 기능은 PlanetKitAudioManager에서 제공
  • PlanetKitAudioDeviceType enum 1-to-1 callGroup call

    이전 버전PlanetKit 6.0
    case spkcase speaker
  • PlanetKitMakeCallSettingBuilder class 1-to-1 call

    이전 버전PlanetKit 6.0
    func build() -> [String: Any]func build() throws -> [String: Any] (iOS만 해당)
  • PlanetKitVerifyCallSettingBuilder class 1-to-1 call

    이전 버전PlanetKit 6.0
    func build() -> [String: Any]func build() throws -> [String: Any] (iOS만 해당)
  • PlanetKitJoinConferenceSettingBuilder class Group call

    이전 버전PlanetKit 6.0
    func build() -> [String: Any]func build() throws -> [String: Any] (iOS만 해당)
추가
  • PlanetKitAudioManager class 1-to-1 callGroup call
    • static var shared: PlanetKitAudioManager { get }
    • var session: PlanetKitAudioSession { get }
    • func startMicPreview(_ preview: PlanetKitAudioMicPreviewDelegate, volumeInternal: TimeInterval = 1.0) -> Bool
    • func stopMicPreview()
    • func playFile(fileResourceUrl: URL, type: String, loopCount: Int32 = -1)
    • func playFile(fileResourceUrl: URL, type: String, loopCount: Int32, completion: @escaping (Bool) -> Void)
    • func playStop(type: String)
    • func setCustomMic(_ customMic: PlanetKitCustomMic)
    • func resetCustomMicToDefaultMic()
    • func setCustomSpeaker(_ customSpeaker: PlanetKitCustomSpeaker)
    • func resetCustomSpeakerToDefaultSpeaker()
    • func addVolumeDelegate(_ delegate: PlanetKitAudioVolumeDelegate, for type: PlanetKitAudioDeviceType)
    • func removeVolumeDelegate(_ delegate: PlanetKitAudioVolumeDelegate, for type: PlanetKitAudioDeviceType)
    • var vpioEnabled: Bool { get set }
    • var defaultMicSampleRate: Float64 { get set }
    • var defaultSpeakerSampleRate: Float64 { get set }
    • var openSettings: PlanetKitAudioSessionSettings? { get set }
    • var closeSettings: PlanetKitAudioSessionSettings? { get set }
    • var defaultIOBufferDuration: Float64 { get set }
    • var micVolume: Float { get }
    • var speakerVolume: Float { get }
    • func setMicVolume(_ volume: Float)
    • func addAudioRouteChangeDelegate(_ delegate: PlanetKitAudioRouteChangeDelegate)
    • func removeAudioRouteChangeDelegate(_ delegate: PlanetKitAudioRouteChangeDelegate)
    • var isBluetoothInput: Bool { get }
    • var isBuiltInOutput: Bool { get }
    • var devices: [PlanetKitAudioDevice] { get }
    • func addDeviceChangeDelegate(_ delegate: PlanetKitAudioDeviceChangeDelegate)
    • func removeDeviceChangeDelegate(_ delegate: PlanetKitAudioDeviceChangeDelegate)
  • PlanetKitAudioSession class 1-to-1 callGroup call
    • var micEnabled: Bool { get }
    • var speakerEnabled: Bool { get }
    • var isStarted: Bool { get }
    • func addMicReceiver(_ micReceiver: PlanetKitAudioMicCaptureDelegate)
    • func removeMicReceiver(_ micReceiver: PlanetKitAudioMicCaptureDelegate)
    • var micModifier: PlanetKitAudioMicCaptureDelegate? { get set }
    • func addSpeakerReceiver(_ speakerReceiver: PlanetKitAudioSpkPlayDelegate)
    • func removeSpeakerReceiver(_ speakerReceiver: PlanetKitAudioSpkPlayDelegate)
    • var speakerModifier: PlanetKitAudioSpkPlayDelegate? { get set }
    • var speakerVolumeReceiver: PlanetKitAudioDeviceVolumeDelegate? { get set }
    • var speakerVolumeInterval: TimeInterval { get set }
    • func speakerOut(_ out: Bool)
    • var isSpeakerOut: Bool
    • var micDevice: PlanetKitAudioDevice? { get }
    • var speakerDevice: PlanetKitAudioDevice? { get }
    • var micVolume: Float { get }
    • var speakerVolume: Float { get }
    • func setVolume(_ volume: Float, for type: PlanetKitAudioDeviceType)
    • func change(micDevice: PlanetKitAudioDevice?, completion: @escaping (NSError?)->Void)
    • func change(speakerDevice: PlanetKitAudioDevice?, completion: @escaping (NSError?)->Void)
    • func setPreferredDefaultDevice(type: PlanetKitAudioDeviceType) throws
  • PlanetKitCustomMic class 1-to-1 callGroup call
    • func sendAudio(audioBuffer: PlanetKitAudioBuffer)
  • PlanetKitCustomSpeaker class 1-to-1 callGroup call
    • func playAudio(audioBuffer: PlanetKitAudioBuffer) -> Int32
  • PlanetKitAudioBuffer class 1-to-1 callGroup call
    • 오디오 데이터 저장 및 관리를 위한 속성
    • 오디오 버퍼 생성을 위한 다양한 초기화자(initializer)
  • PlanetKitAudioMicPreviewDelegate protocol 1-to-1 callGroup call
    • func volumeDidUpdate(micVolume: Float)
삭제
  • PlanetKitAudioMic class 1-to-1 callGroup call
  • PlanetKitAudioSpk class 1-to-1 callGroup call
  • PlanetKitAudioMicSpk class 1-to-1 callGroup call
  • PlanetKitAudioMicControllable protocol 1-to-1 callGroup call
  • PlanetKitAudioSpkControllable protocol 1-to-1 callGroup call
  • PlanetKitCall class 1-to-1 call
    • var audioManager: PlanetKitAudioManager { get }
    • weak var spkModifier: PlanetKitAudioSpkPlayDelegate? { get set }
    • weak var spkReceiver: PlanetKitAudioSpkPlayDelegate? { get set }
    • weak var micModifier: PlanetKitAudioMicCaptureDelegate? { get set }
    • weak var micReceiver: PlanetKitAudioMicCaptureDelegate? { get set }
  • PlanetKitConference class Group call
    • var audioManager: PlanetKitAudioManager { get }
    • weak var spkModifier: PlanetKitAudioSpkPlayDelegate? { get set }
    • weak var spkReceiver: PlanetKitAudioSpkPlayDelegate? { get set }
    • weak var micModifier: PlanetKitAudioMicCaptureDelegate? { get set }
    • weak var micReceiver: PlanetKitAudioMicCaptureDelegate? { get set }
  • PlanetKitMakeCallSettingBuilder class 1-to-1 call
    • func withCustomMicKey(mic: PlanetKitAudioMicControllable) -> PlanetKitMakeCallSettingBuilder
    • func withCustomSpkKey(spk: PlanetKitAudioSpkControllable) -> PlanetKitMakeCallSettingBuilder
  • PlanetKitVerifyCallSettingBuilder class 1-to-1 call
    • func withCustomMicKey(mic: PlanetKitAudioMicControllable) -> PlanetKitVerifyCallSettingBuilder
    • func withCustomSpkKey(spk: PlanetKitAudioSpkControllable) -> PlanetKitVerifyCallSettingBuilder
  • PlanetKitJoinConferenceSettingBuilder class Group call
    • func withCustomMicKey(mic: PlanetKitAudioMicControllable) -> PlanetKitJoinConferenceSettingBuilder
    • func withCustomSpkKey(spk: PlanetKitAudioSpkControllable) -> PlanetKitJoinConferenceSettingBuilder

예제 코드

오디오 설정에서 마이크/스피커 장치의 볼륨 미리보기
class ViewController: UIViewController {
....
override func viewDidLoad() {
super.viewDidLoad()

let currentMicVolume = PlanetKitAudioManager.shared.session.micVolume
let currentSpeakerVolume = PlanetKitAudioManager.shared.session.speakerVolume
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

PlanetKitAudioManager.shared.addVolumeDelegate(self, for: .mic)
PlanetKitAudioManager.shared.addVolumeDelegate(self, for: .speaker)
PlanetKitAudioManager.shared.startMicPreview(self, volumeInternal: 0.1)
}

override func viewDidDisappear() {
super.viewDidDisappear()

PlanetKitAudioManager.shared.removeVolumeDelegate(self, for: .mic)
PlanetKitAudioManager.shared.removeVolumeDelegate(self, for: .speaker)
PlanetKitAudioManager.shared.stopMicPreview()
}
}

extension ViewController: PlanetKitAudioMicPreviewDelegate {
func volumeDidUpdate(micVolume: Float) {
DispatchQueue.main.async {
// TODO: Update mic volume level in the UI.
}
}
}

extension ViewController: PlanetKitAudioVolumeDelegate {
func didChangeVolume(_ type: PlanetKitAudioDeviceType, volume: Float) {
DispatchQueue.main.async {
// TODO: Update mic/speaker volume in the UI.
}
}
}
커스텀 마이크 사용하기
class YourCustomMicManager {
....
func setCustomMic() {
var input = AudioFileInput(url: url, call: call)
PlanetKitAudioManager.shared.setCustomMic(input)
}

func resetMic(_ device: PlanetKitAudioDevice?) {
PlanetKitAudioManager.shared.resetCustomMicToDefaultMic()

guard device?.deviceID != PlanetKitAudioManager.shared.session.micDevice?.deviceID else {
return
}

PlanetKitAudioManager.shared.session.change(micDevice: device) { error in
if let error = error {
print(error)
}
}
}
}

// TODO: Implement your own custom mic.
class AudioFileInput: PlanetKitCustomMic {
init(url: URL, call: PlanetKitCall) {
....
}
}
(macOS에만 해당) 마이크/스피커 장치 목록 가져오기
....
private var micDevices = [PlanetKitAudioDevice]()
private var speakerDevices = [PlanetKitAudioDevice]()

func refreshDevices() {
micDevices.removeAll()
speakerDevices.removeAll()

let devices = PlanetKitAudioManager.shared.devices
for device in devices {
if device.isCapturable {
micDevices.append(device)
}
if device.isPlayable {
speakerDevices.append(device)
}
}
if let micDevice = PlanetKitAudioManager.shared.session.micDevice {
refreshCurrentDevice(micDevice, type: .mic)
}
if let speakerDevice = PlanetKitAudioManager.shared.session.speakerDevice {
refreshCurrentDevice(speakerDevice, type: .speaker)
}
}

func refreshCurrentDevice(_ device: PlanetKitAudioDevice?, type: PlanetKitAudioDeviceType) {
// TODO: Update the current audio device in the UI.
}
(macOS에만 해당) 마이크/스피커 장치의 변경 사항 관찰하기
class ViewController: UIViewController {
....
override func viewWillAppear() {
super.viewWillAppear()

PlanetKitAudioManager.shared.addDeviceChangeDelegate(self)
}

override func viewDidDisappear() {
super.viewDidDisappear()

PlanetKitAudioManager.shared.removeDeviceChangeDelegate(self)
}
}

extension ViewController: PlanetKitAudioDeviceChangeDelegate {
func didAudioDevicesUpdate(devices: [PlanetKitAudioDevice]) {
DispatchQueue.main.async {
self.refreshDevices()
}
}

func didAudioDeviceChange(device: PlanetKitAudioDevice?, type: PlanetKitAudioDeviceType) {
DispatchQueue.main.async {
// TODO: Update the currently selected audio device in the UI.
}
}
....
}
(macOS에만 해당) 현재 마이크/스피커 장치 변경하기
....
@IBAction func deviceChanged(_ sender: NSPopUpButton) {
if sender === micDevicesButton {
let device = micDevices[sender.indexOfSelectedItem]
PlanetKitAudioManager.shared.session.change(micDevice: device) { error in
if let error = error {
print(error)
}
}
}
else {
let device = speakerDevices[sender.indexOfSelectedItem]
PlanetKitAudioManager.shared.session.change(speakerDevice: device) { error in
if let error = error {
print(error)
}
}
}
}

카메라 장치 전환 API 개선

커스텀 카메라를 사용할 때에는 현재 사용 중인 카메라 장치에서 다른 카메라 장치로 전환할 수 없습니다. 해당 상황에서 오류가 발생하도록 관련 API를 개선했습니다.

API

변경
  • PlanetKitCameraManager class 1-to-1 callGroup call

    이전 버전PlanetKit 6.0
    func change(deviceInfo: PlanetKitVideoCaptureDeviceInfo)func change(deviceInfo: PlanetKitVideoCaptureDeviceInfo) throws

커스텀 카메라 API 이름 변경

커스텀 카메라에서 기본 카메라로 전환하는 함수의 이름을 의미가 보다 명확하게 전달되도록 변경했습니다.

API

변경
  • PlanetKitCameraManager class 1-to-1 callGroup call

    이전 버전PlanetKit 6.0
    func resetToDefaultCamera()func resetCustomCameraToDefaultCamera()

통화 수신 중 클라우드 통화 녹음 활성화 여부 확인 기능 추가

  • PlanetKitCCParam에 통화 수신 중 클라우드 통화 녹음 활성화 여부를 확인할 수 있는 필드를 추가했습니다.

API

추가
  • PlanetKitCCParam class 1-to-1 call
    • var isRecordOnCloudEnabled: Bool

영상 통화 활성화 시 응답 유형 설정 API 제거

  • 이제 1대1 음성 통화에서 상대방이 영상 통화를 활성화할 때 로컬 사용자의 비디오는 항상 일시 정지 상태로 설정됩니다.
    • 이전 버전에서는 상대방이 음성 통화를 영상 통화로 전환할 때 로컬 사용자의 비디오 전송을 자동으로 시작할지 withResponseOnEnableVideo()를 사용하여 결정할 수 있었습니다.
    • 그러나 이 API는 개인정보 보호 문제와 잠재적 오용 가능성 때문에 버전 6.0에서 제거하고, PlanetKitCallDelegate.videoEnabledByPeerPlanetKitCallDelegate.videoEnabledByPeerAndMyVideoPaused으로 변경했습니다.
    • 따라서 6.0 버전부터는 상대방이 영상 통화를 활성화할 때 로컬 사용자의 비디오는 일시 정지된 상태로 유지됩니다.
  • 이 변경에 따라 이전에 PlanetKitResponseOnEnableVideo.send를 이용하던 코드는 videoEnabledByPeerAndMyVideoPaused 이벤트를 수신한 후 수동으로 비디오를 다시 재생하는 방식으로 업데이트해야 합니다.
    • 자세한 내용은 아래 예제 코드를 참고하세요.

예제 코드

  • 6.0 버전에서 이전에 PlanetKitResponseOnEnableVideo.send를 사용해 구현한 동작을 재현하려면 다음과 같이 구현하세요.
class CallDelegate: PlanetKitCallDelegate {
func videoEnabledByPeerAndMyVideoPaused(_ call: PlanetKitCall) {
// Your existing code...

// Add this to replicate PlanetKitResponseOnEnableVideo.send behavior
call.resumeMyVideo()
}
}

API

변경
  • PlanetKitCallDelegate protocol 1-to-1 call

    이전 버전PlanetKit 6.0.0
    func videoEnabledByPeer(_ call: PlanetKitCall)func videoEnabledByPeerAndMyVideoPaused(_ call: PlanetKitCall)
삭제
  • PlanetKitResponseOnEnableVideo enum 1-to-1 call
  • PlanetKitCall class 1-to-1 call
    • var responseOnEnableVideo: PlanetKitResponseOnEnableVideo { get }
  • PlanetKitMakeCallSettingBuilder class 1-to-1 call
    • func withResponseOnEnableVideo(response: PlanetKitResponseOnEnableVideo)
  • PlanetKitVerifyCallSettingBuilder class 1-to-1 call
    • func withResponseOnEnableVideo(response: PlanetKitResponseOnEnableVideo)

설정 빌더에서의 오류 처리를 위한 PlanetKitSettingError 추가

PlanetKitSettingError 열거형은 설정 빌더에 대한 표준화된 오류 처리를 제공합니다.

API

추가
  • PlanetKitSettingError enum 1-to-1 callGroup call

(iOS) 통화 설정 생성 시 PlanetKitCallKitSetting 필수화

PlanetKit SDK는 세 가지 CallKit 연동 옵션을 지원합니다.

  • 사용자 정의 CallKit 구현
  • PlanetKit의 내부 CallKit 구현
  • CallKit 연동 없음

이번 버전부터 iOS에서는 통화를 생성하거나, 통화를 수신하거나, 그룹 통화에 참여하기 위한 설정을 생성할 때 PlanetKitCallKitSettingPlanetKitCallKitType과 함께 설정해야 합니다. 설정하지 않으면 PlanetKitMakeCallSettingBuilder.build(), PlanetKitVerifyCallSettingBuilder.build(), 또는 PlanetKitJoinConferenceSettingBuilder.build()로 통화 설정을 생성할 때 PlanetKitSettingError.callKitSettingNotSet 오류가 발생합니다.

PlanetKitCallKitType.user 또는 .planetkit로 설정된 경우, PlanetKit은 마이크 표시기의 제어를 CallKit에 위임한다는 점을 유의하시기 바랍니다.

API

변경
  • PlanetKitMakeCallSettingBuilder class 1-to-1 call

    이전 버전PlanetKit 6.0
    func build() -> [String: Any]func build() throws -> [String: Any] (iOS만 해당)
  • PlanetKitVerifyCallSettingBuilder class 1-to-1 call

    이전 버전PlanetKit 6.0
    func build() -> [String: Any]func build() throws -> [String: Any] (iOS만 해당)
  • PlanetKitJoinConferenceSettingBuilder class Group call

    이전 버전PlanetKit 6.0
    func build() -> [String: Any]func build() throws -> [String: Any] (iOS만 해당)

예제 코드

PlanetKitCallKitType에 따라 PlanetKitCallKitSetting 생성
func createUserCallKitSetting() -> PlanetKitCallKitSetting {
// Select the appropriate CallKit integration option from the examples below

// Option 1: When integrating the user CallKit implementation
let callKitSetting = PlanetKitCallKitSetting(type: .user, param: nil)

// Option 2: When using PlanetKit internal CallKit implementation
let callkitParam = PlanetKitCallKitParam(
appName: "Example app",
callerName: "caller name",
isVideo: true,
ringtoneSound: nil,
icon: "example icon",
addCallToList: true,
supportsHolding: true
)
let callKitSetting = PlanetKitCallKitSetting(type: .planetkit, param: callkitParam)

// Option 3: When CallKit is not used in the app
let callKitSetting = PlanetKitCallKitSetting(type: .none, param: nil)

return callKitSetting
}