Повторная инициализация CallKit вызывает com.apple.CallKit.error.requesttransaction Code = 4 (UnknownCallUUID) - PullRequest
0 голосов
/ 23 октября 2019

В моем приложении 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 во время выполнения приложения?

1 Ответ

0 голосов
/ 23 октября 2019

Документация гласит:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...