CallKit CXCallController.request ошибка com.apple.CallKit.error.requesttransaction Code = 6, когда приложение находится в фоновом режиме - PullRequest
2 голосов
/ 22 февраля 2020

Эта ошибка возникает только в iOS 13.3.1. Это не происходит на iOS 13.3.0 или ранее.

Если приложение находится на переднем плане и вызывает CXCallController.request, оно работает нормально. Но как только я создаю фоновое приложение и выполняю «CXCallController.request» (запускается кнопкой воспроизведения в наушниках), я получаю следующую ошибку:

Error requesting transaction: Error Domain=com.apple.CallKit.error.requesttransaction Code=6 "(null)"

Код 6 равен CXErrorCodeRequestTransactionError.Code.invalidAction

Вот фрагмент примера кода

let uuid = UUID()
let handle = CXHandle(type: .emailAddress, value: "jappleseed@apple.com")

let startCallAction = CXStartCallAction(call: uuid, handle: handle)

let transaction = CXTransaction(action: startCallAction)
callController.request(transaction) { error in
    if let error = error {
        print("Error requesting transaction: \(error)")
    } else {
        print("Requested transaction successfully")
    }
}

Этот же код отлично работает в iOS 13.3.0 и более ранних версиях независимо от того, является ли приложение передним или задним планом. Может быть, это ошибка 13.3.1 или, возможно, Apple реализовала некоторые меры безопасности, когда приложения находятся в фоновом режиме? Но я не вижу этого в примечаниях к выпуску iOS 13.3.1.

1 Ответ

1 голос
/ 07 марта 2020

Я нашел способ обойти свой вопрос. Это может работать только для моего конкретного условия c. Это может не решить проблему для всех код ошибки = 6. Просто чтобы ты знал.

Способ исправить это состоит в том, что вы должны воспроизводить звук, прежде чем звонить CXCallController.request(:), когда ваше приложение находится в фоновом режиме. Вы можете даже играть тихий звук на секунду, если хотите. Это не должен быть слышимый звук.

Если он не работает, вы можете попробовать использовать диспетчеризацию asyn c с задержкой 0,1 секунды для вызова CXCallController.request(:). Идея состоит в том, что вам нужно убедиться, что аудио движок активен, когда вы звоните CXCallController.request(:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...