Как возобновить вызов 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) {
//...
}];
Я хотел бы помочь вам больше писать код, но я пишу в мобильном телефоне, и я не помню, как получить доступ к информации о звонке.
Я надеюсь, что это поможет вам