Ошибка при запросе транзакции с помощью CXAnswerCallAction, когда приложение работает в фоновом режиме

#ios #objective-c #swift #iphone #callkit

#iOS #objective-c #swift #iPhone #callkit

Вопрос:

В моем приложении есть функция автоматического ответа. Когда я получаю входящий вызов и приложение работает в фоновом режиме, после интервала автоматического ответа (т.Е. 5 секунд) Я создаю CXAnswerCallAction с соответствующим UUID вызова и запрашиваю транзакцию. Я получаю эту ошибку.

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

Согласно документации Apple

Код 6 — CXErrorCodeRequestTransactionErrorInvalidAction

Он работал раньше, но внезапно перестал работать. Можем ли мы что-нибудь сделать? Любая помощь, связанная с проблемой, действительно ценится.

Комментарии:

1. До чего это работало?

2. @Marco это работало до iOS 13.2

3. Неужели никто не может ответить на этот вопрос?

Ответ №1:

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

Если это не сработает, вы можете попробовать использовать dispatch async с задержкой в 0,1 секунды для вызова

CXCallController.request(:)

Идея в том, что вам нужно убедиться, что звуковой движок активен при вызове CXCallController.request(:)

Ответ №2:

вы можете использовать приведенный ниже код для выполнения асинхронной отправки

 let answerAction: CXAnswerCallAction = CXAnswerCallAction(call: uuid)
                        let transaction: CXTransaction = CXTransaction(action: answerAction)
                        let when = DispatchTime.now() 0.1

                        DispatchQueue.main.asyncAfter(deadline: when) {
                            print("answering call")
                            self.callKitCallController.request(transaction, completion: { error in
                                if (error != nil)
                                {
                                    print("did answer")
                                    answerAction.fulfill()
                                }
                                else
                                {
                                    print("answer failed: (String(describing: error?.localizedDescription))")
                                }
                            })
                        }
 

Комментарии:

1. Работает ли этот код, когда приложение работает в фоновом режиме?

2. извините, но я попробовал этот код, и он не работает в фоновом или заблокированном состоянии