Как завершить телефонный звонок на iOS с помощью callkit?

Я хочу завершить телефонный звонок с помощью callkit api. Но я получаю эту информацию "com.apple.CallKit.error.requesttransaction error 4". Я не знаю почему и что происходит. Кстати, телефонный звонок - это реальный звонок, а не звонок VOIP.

CallKit CXError.h CXErrorCodeRequestTransactionErrorUnknownCallUUID 4

Подготовьте, включите voip для ошибки com.apple.CallKit.error.requesttransaction 1 и создайте глобальную переменную CXCallController *callController введите описание изображения здесь

Во-первых, я использую CXCallObserver получить вызов UUID

- (void)callObserver:(CXCallObserver *)callObserver callChanged: (CXCall *)call {
}

Далее, я использую некоторые API для завершения телефона, и я положил его в callObserver

    NSUUID *callUUID = call.UUID;
    CXEndCallAction *endaction = [[CXEndCallAction alloc] initWithCallUUID:callUUID];
    CXTransaction *transaction = [[CXTransaction alloc] initWithAction:endaction];

    [self.callController requestTransaction:transaction completion:^(NSError * _Nullable error) {
        if (error) {
            NSLog(@"EndCallAction transaction request failed: %@", [error localizedDescription]);
        } else {
            NSLog(@"EndCallAction transaction request successful");
        }
    }];

Наконец-то я понял. PS: UUID не пустой. введите описание изображения здесь

Я сослался на Как закончить звонок в CallKit. Но бесполезно. Я понятия не имею. Пожалуйста, помогите или попробуйте дать некоторые идеи, как этого добиться. Спасибо!

3 ответа

Решение

Вы можете использовать CallKit только для управления вызовами VoIP, которые были установлены вашим приложением. Вы не можете управлять сотовыми звонками или звонками VoIP из других приложений.

Документация Apple, кажется, предполагает, что возможно удержать телефонный звонок в режиме удержания https://developer.apple.com/documentation/callkit/cxcall но это, похоже, не работает для меня. Если он должен работать, он должен работать и для завершения вызова.

Я тоже попробовал вышеупомянутое, и хотя CallObserver выдает UUID вызова из списка вызовов, он показывает вышеуказанную ошибку.

Но затем подумайте, как это будет работать, если у вас есть приложение VOIP, и вы работали с существующим вызовом телефонии, и вы хотите удержать / завершить вызов телефонии и ответить на входящий вызов (вашего приложения VOIP).

вам нужно просто вызвать функцию ниже, передав uuid

      func performEndCallAction(uuid: UUID) {

    let endCallAction = CXEndCallAction(call: uuid)
    let transaction = CXTransaction(action: endCallAction)

    callKitCallController.request(transaction) { error in
        if let error = error {
            NSLog("EndCallAction transaction request failed: \(error.localizedDescription).")
        } else {
            NSLog("EndCallAction transaction request successful")
        }
    }
}
Другие вопросы по тегам