2016-10-18 2 views
2

Я на самом деле на скорости 2.3. Входящий звонок отлично работает с CallKit. Но OutGoing Call ....Сделать исходящий звонок с помощью CallKit

Я видел проект SpeakerBox, я делаю то же самое. Но это не сработает.

Чтобы начать свой вызов, я использовал

let handle = CXHandle(type: .PhoneNumber, value: "TOTO") 
let startCallAction = CXStartCallAction(callUUID: uuid, handle: handle) 
startCallAction.video = video 
let transaction = CXTransaction() 
transaction.addAction(startCallAction) 
requestTransaction(transaction) 

После, в SpeakerBox проекта, эта функция называется:

func provider(provider: CXProvider, perform action: CXStartCallAction) 

Но не в моем проекте. Затем, когда я зависаю, я вижу: «Call failed».

У вас есть идея?

+0

«Call Failed» часто указывает, что ваше собственное приложение разбилось, можете ли вы сказать в отладчике, что ваше приложение рушится? –

+0

Вы делаете это на устройстве, а не на симуляторе? Вы добавили режим voip-фона? Вы правильно инициализировали своего провайдера? – user102008

ответ

0

Убедитесь, что вы настраиваете свой CXProvider и правильно устанавливаете его делегат. Если вы не установили свойство CXProvider delegate, делегат не получит никаких действий для выполнения.

Кроме того, если вы видите пользовательский интерфейс «Сбой при вызове», это может указывать на сбой вашего приложения. Я проверил бы журналы сбоев или запустил приложение в отладчике.

0

Насколько я могу видеть, SpeakerBox демо не выполняет следующий метод поставщика:

https://developer.apple.com/documentation/callkit/cxprovider/1930701-reportcall

func reportCall(with UUID: UUID, 
     endedAt dateEnded: Date?, 
     reason endedReason: CXCallEndedReason) 

- (void)reportCallWithUUID:(NSUUID *)UUID endedAtDate:(nullable NSDate 
*)dateEnded reason:(CXCallEndedReason)endedReason; 

Что приводит к "Сбой вызова" экран UI существо отображается, поскольку CallKit не получил причину, по которой вызов закончился, и кажется, что « CXCallEndedReasonFailed» принимается по умолчанию.

Вызовите «reportCall finishedAt», прежде чем запрашивать транзакцию CXEndCallAction, чтобы удалить экран «Ошибка вызова».

+0

Даже добавив это, мы по-прежнему видим «Ошибка вызова». Когда мы добавляем это, мы также видим ошибку транзакции CXEndCallAction - Ошибка домена = com.apple.CallKit.error.requesttransaction Код = 4 (что неизвестноCallUUID). Нужно ли выполнять этот асинхронный вызов или как часть обработки действия завершения вызова в Делегате провайдера? – LowAmmo

+0

Если вы получили сообщение об ошибке «Ошибка домена = com.apple.CallKit.error.requesttransaction Code = 4 (which unknownCallUUID)», вы передаете неизвестный UUID методу «reportCallWithUUID». Убедитесь, что вы используете тот же самый UUID вызова, что и ваш фактический звонок – Leetmorry

Смежные вопросы