Я создаю приложение с помощью службы VOIP. Теперь я интегрировал свое приложение с CallKit
, чтобы обрабатывать запрос входящего вызова.
Когда приложение остается на переднем плане или в фоновом режиме, они нормально работают при ответе на вызов. Но проблема в том, что когда экран заблокирован, и я пытался ответить на звонок, но, к сожалению, я не слышу звук с обеих сторон, даже если я разблокировал экран.
Как решить эту проблему?
Вот как сообщает о входящих звонках:
func reportIncomingCall(uuid: UUID, handle: String, hasVideo: Bool = false, completion: ((NSError?) -> Void)?) {
// 1.
print("This is UUID === ", uuid)
configureAudioSession()
let update = CXCallUpdate()
update.remoteHandle = CXHandle(type: .phoneNumber, value: handle)
update.hasVideo = hasVideo
provider.reportNewIncomingCall(with: uuid, update: update) { error in
if error == nil {
// 3.
self.configureAudioSession()
let call = CallKitCallInit(uuid: uuid, handle: handle)
self.callKitManager.add(call: call)
lastCallUUID = uuid
print("UUID === ", uuid)
} else {
}
// 4.
completion?(error as NSError?)
}
}
Вот как я настраиваю звук
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do{
try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
} catch {
print("========== Error in setting category \(error.localizedDescription)")
}
do {
try session.setMode(AVAudioSessionModeVoiceChat)
} catch {
print("========= Error in setting mode \(error.localizedDescription)")
}
do {
try session.setPreferredSampleRate(44100.0)
} catch {
print("======== Error setting rate \(error.localizedDescription)")
}
do {
try session.setPreferredIOBufferDuration(0.005)
} catch {
print("======== Error IOBufferDuration \(error.localizedDescription)")
}
do {
try session.setActive(true)
} catch {
print("========== Error starting session \(error.localizedDescription)")
}
}
Когда я ответил на звонок, когда экран заблокирован, я увидел ошибку, которую он выдал в функции configureAudioSession()
.
Почему не удается установить звук при заблокированном экране?
action.fulfill()
внутриprovider(_ provider: CXProvider, perform action: CXAnswerCallAction)
функции CXProviderDelegate - person Visal Sambo   schedule 23.07.2019