Повторная инициализация CallKit вызывает com.apple.CallKit.error.requesttransaction Code = 4 (UnknownCallUUID)

Мое приложение iOS VoIP использует CallKit для поддержки встроенной функции интеграции вызовов. При первом запуске все работает нормально, но если я повторно инициализирую CXProvider и CXCallController (чтобы отключить / включить функцию), после зависания входящего вызова я получаю сообщение об ошибке «com.apple.CallKit.error.requesttransaction Code = 4».

@implementation CallKitHandler
- (void) configureCallKitWith
{
    ...
    self.callKitProvider = [[CXProvider alloc]  initWithConfiguration:_cxpConfiguration];
    [_callKitProvider setDelegate:self queue:nil];

    self.callKitCallController = [CXCallController new];
    [_callKitCallController.callObserver setDelegate:self      queue:nil];
    ...
}
- (void) requestEndCallActionWithCall:(Call*) callEnded
{
    CXEndCallAction* endCallAction = [[CXEndCallAction alloc] initWithCallUUID:self.callUUId];
    CXTransaction* transaction = [[CXTransaction alloc] initWithAction:endCallAction];
    OTCLogVerbose (@"requestEndCallActionWithCall '%@' : %@", callEnded.reference, transaction);

    [self.callKitCallController requestTransaction:transaction completion:^(NSError* error) {
        if (error)
        {
            OTCLogWarn (@"requestEndCallActionWithCall failed for '%@': %@", _callUUId, [self errorDescriptionOf: error]);

Я попытался сделать свой класс CallKitHandler одноэлементным, и, похоже, он работает, это единственное возможное решение? Следует ли избегать повторной инициализации CallKit во время выполнения приложения?


person Ruslan    schedule 23.10.2019    source источник


Ответы (1)


В документации говорится:

Приложение VoIP должно создать только один экземпляр CXProvider и сохранить его для использования в глобальном масштабе.

Итак, да: вам следует избегать создания экземпляра CXProvider каждый раз, когда вы хотите его перенастроить. Просто сохраните глобальную ссылку и при необходимости измените ее конфигурацию.

person Marco    schedule 23.10.2019