릴리스 노트
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 callfunc 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.isVideoHwCodecEnabled
PlanetKitCallConnectedParam.isVideoHardwareCodecEnabled
PlanetKitConferenceConnectedParam.isVideoHwCodecEnabled
PlanetKitConferenceConnectedParam.isVideoHardwareCodecEnabled
추가
PlanetKitVideoResolutionCapability
enum 1-to-1 callGroup callcase qvga
- 최대 해상도 320x240case vga
- 최대 해상도 640x480case hd
- 최대 해상도 1280x960case fhd
- 최대 해상도 1920x1080
PlanetKitVideoCapabilityUsage
enum 1-to-1 callGroup callcase callSend
case callReceive
case conferenceSend
case conferenceReceive
PlanetKitPreferredHardwareCodec
class 1-to-1 callGroup callvar 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 callfunc getDeviceDefaultVideoCapability(usage: PlanetKitVideoCapabilityUsage) -> PlanetKitVideoCapability
func getVideoPreferredHardwareCodec() -> PlanetKitPreferredHardwareCodec
PlanetKitInitialSettingBuilder
class 1-to-1 callGroup callfunc withSetPreferredHardwareCodecKey(preferredHardwareCodec: PlanetKitPreferredHardwareCodec) -> PlanetKitInitialSettingBuilder
삭제
PlanetKitCall
class 1-to-1 callvar myVideoSendCapability: PlanetKitVideoCapability { get }
var myVideoReceiveCapability: PlanetKitVideoCapability { get }
PlanetKitConference
class Group callvar myVideoSendCapability: PlanetKitVideoCapability { get }
var myVideoRecvPreferredHwCodec: Bool { get }
PlanetKitVideoCapability
class 1-to-1 callGroup callvar preferredHwCodec: Bool
static var callSendDefault: PlanetKitVideoCapability
static var callReceiveDefault: PlanetKitVideoCapability
static var conferenceSendDefault: PlanetKitVideoCapability
PlanetKitJoinConferenceSettingBuilder
extension Group callfunc 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 -> PlanetKitVolumeLevel
func volumeLevelSetting() throws -> PlanetKitVolumeLevel
추가
PlanetKitConferencePeerControl
class Group callfunc setVolumeLevelSetting(_ volumeLevel: Int8, completion: @escaping (Bool)->Void)
삭제
PlanetKitSubgroupManager
class Group callfunc 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 spk
case 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 callstatic 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 callvar 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 callfunc sendAudio(audioBuffer: PlanetKitAudioBuffer)
PlanetKitCustomSpeaker
class 1-to-1 callGroup callfunc playAudio(audioBuffer: PlanetKitAudioBuffer) -> Int32
PlanetKitAudioBuffer
class 1-to-1 callGroup call- 오디오 데이터 저장 및 관리를 위한 속성
- 오디오 버퍼 생성을 위한 다양한 초기화자(initializer)
PlanetKitAudioMicPreviewDelegate
protocol 1-to-1 callGroup callfunc volumeDidUpdate(micVolume: Float)
삭제
PlanetKitAudioMic
class 1-to-1 callGroup callPlanetKitAudioSpk
class 1-to-1 callGroup callPlanetKitAudioMicSpk
class 1-to-1 callGroup callPlanetKitAudioMicControllable
protocol 1-to-1 callGroup callPlanetKitAudioSpkControllable
protocol 1-to-1 callGroup callPlanetKitCall
class 1-to-1 callvar 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 callvar 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 callfunc withCustomMicKey(mic: PlanetKitAudioMicControllable) -> PlanetKitMakeCallSettingBuilder
func withCustomSpkKey(spk: PlanetKitAudioSpkControllable) -> PlanetKitMakeCallSettingBuilder
PlanetKitVerifyCallSettingBuilder
class 1-to-1 callfunc withCustomMicKey(mic: PlanetKitAudioMicControllable) -> PlanetKitVerifyCallSettingBuilder
func withCustomSpkKey(spk: PlanetKitAudioSpkControllable) -> PlanetKitVerifyCallSettingBuilder
PlanetKitJoinConferenceSettingBuilder
class Group callfunc 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 callvar isRecordOnCloudEnabled: Bool
영상 통화 활성화 시 응답 유형 설정 API 제거
- 이제 1대1 음성 통화에서 상대방이 영상 통화를 활성화할 때 로컬 사용자의 비디오는 항상 일시 정지 상태로 설정됩니다.
- 이전 버전에서는 상대방이 음성 통화를 영상 통화로 전환할 때 로컬 사용자의 비디오 전송을 자동으로 시작할지
withResponseOnEnableVideo()
를 사용하여 결정할 수 있었습니다. - 그러나 이 API는 개인정보 보호 문제와 잠재적 오용 가능성 때문에 버전 6.0에서 제거하고,
PlanetKitCallDelegate.videoEnabledByPeer
는PlanetKitCallDelegate.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 callPlanetKitCall
class 1-to-1 callvar responseOnEnableVideo: PlanetKitResponseOnEnableVideo { get }
PlanetKitMakeCallSettingBuilder
class 1-to-1 callfunc withResponseOnEnableVideo(response: PlanetKitResponseOnEnableVideo)
PlanetKitVerifyCallSettingBuilder
class 1-to-1 callfunc withResponseOnEnableVideo(response: PlanetKitResponseOnEnableVideo)
설정 빌더에서의 오류 처리를 위한 PlanetKitSettingError
추가
PlanetKitSettingError
열거형은 설정 빌더에 대한 표준화된 오류 처리를 제공합니다.
API
추가
PlanetKitSettingError
enum 1-to-1 callGroup call
(iOS) 통화 설정 생성 시 PlanetKitCallKitSetting
필수화
PlanetKit SDK는 세 가지 CallKit 연동 옵션을 지원합니다.
- 사용자 정의 CallKit 구현
- PlanetKit의 내부 CallKit 구현
- CallKit 연동 없음
이번 버전부터 iOS에서는 통화를 생성하거나, 통화를 수신하거나, 그룹 통화에 참여하기 위한 설정을 생성할 때 PlanetKitCallKitSetting
을 PlanetKitCallKitType
과 함께 설정해야 합니다. 설정하지 않으면 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
}