Как возобновить вызов CallKit на удержании

Я использую CallKit в моем приложении Objective-C.

Я могу позвонить с помощью CallKit. Если поступит второй звонок, я успешно переведу его на удержание. Когда я заканчиваю второй звонок,

- (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action

и

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

методы вызывают.

Но

 - (void)provider:(CXProvider *)provider performSetHeldCallAction:(CXSetHeldCallAction *)action

метод не будет вызван автоматически.

Нужно ли запускать его вручную, например, с помощью метода, подобного

- (void)performHoldCallActionWithUUID:(NSUUID *)uuid onHold:(BOOL)onHold {
    //...

    CXSetHeldCallAction *holdCallAction = [[CXSetHeldCallAction alloc] initWithCallUUID:uuid onHold:onHold];
    CXTransaction *transaction = [[CXTransaction alloc] initWithAction:holdCallAction];

    [self.callKitCallController requestTransaction:transaction completion:^(NSError *error) {
        //...
    }];
}

или есть ли способ заставить провайдера вызывать его "автоматически", когда второй звонок завершается пользователем?

Благодарю.

1 ответ

Система только уведомляет вас, что вызов завершен (с UUID) и статус вызова был изменен, но это не меняет статус вашего вызова, вам нужно сделать это вручную.

Опция отключена, когда система уведомляет вас через

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

Для этого вы получите вызов, который был изменен, и вы можете получить доступ к UUID вызова. Вы можете узнать, что вызов был завершен, и сравнить UUID, чтобы узнать, является ли этот вызов вызовом приложения. Если:

  • приложение имеет активный вызов,
  • и это в ожидании,
  • и вызов, полученный как параметр в методе, не является вашим вызовом (UUID не равны)
  • и вызов, полученный как параметр, был завершен,

после этого вы можете выйти из режима удержания вызова с помощью:

CXSetHeldCallAction *holdCallAction = [[CXSetHeldCallAction alloc] initWithCallUUID:appCallUUID onHold:NO];
CXTransaction *transaction = [[CXTransaction alloc] initWithAction:holdCallAction];

[self.callKitCallController requestTransaction:transaction completion:^(NSError *error) {
    //...
}];

Я хотел бы помочь вам больше писать код, но я пишу в мобильном телефоне, и я не помню, как получить доступ к информации о звонке.

Я надеюсь, что это поможет вам

Другие вопросы по тегам