2016-10-04 4 views
2

Я пытаюсь интегрировать CallKit в свое приложение Voip. Я ссылался на образец кода SpeakerBox от Apple WWDC. Я создал класс ProviderDelegate, и я могу видеть интерфейс входящего вызова после вызова метода reportNewIncomingCall.Методы CXProviderDelegate не запускаются

Но когда я нажимаю кнопку «Ответ»/«Конец», соответствующие делегаты провайдера не запускаются. Что здесь может быть не так?

Обратите внимание, что при создании экземпляра CallProviderDelegate вызывается «providerDidBegin».

@implementation CallProviderDelegate 

- (instancetype)init 
{ 
    self = [super init]; 
    if (self) { 
     _providerConfiguration = [self getProviderConfiguration]; 
     _provider = [[CXProvider alloc] initWithConfiguration:_providerConfiguration]; 
     [_provider setDelegate:self queue:nil]; 
    } 
    return self; 
} 

- (void)providerDidBegin:(CXProvider *)provider { 
    // this is getting called 
} 

- (void)provider:(CXProvider *)provider performAnswerCallAction:(CXAnswerCallAction *)action { 
    // this is not getting called when the Answer button is pressed 
} 

- (void)reportNewIncomingCallWithUUID:(nonnull NSUUID *)UUID handle:(nonnull NSString *)handle 
          completion:(nullable void (^)(NSError *_Nullable error))completion { 

    CXCallUpdate *update = [[CXCallUpdate alloc] init]; 
    update.remoteHandle = [[CXHandle alloc] initWithType:CXHandleTypePhoneNumber value:handle]; 
    update.hasVideo = NO; 

    [_provider reportNewIncomingCallWithUUID:UUID update:update completion:^(NSError * _Nullable error) { 
     completion(error); 
    }]; 
} 

В Caller Класс:

CallProviderDelegate *providerDelegate = [[CallProviderDelegate alloc] init]; 
[providerDelegate reportNewIncomingCallWithUUID:[NSUUID UUID] handle:@"Raj" completion:^(NSError * _Nullable error) { 
      // 
}]; 

ответ

2

В классе «вызывающего абонента», то есть код, в котором вы экземпляр CallProviderDelegate класса и присвоить его переменной providerDelegate, вы хранить ссылку providerDelegate объект в переменной или свойстве экземпляра? Если он назначается только временной локальной переменной, то объект CallProviderDelegate будет освобожден после завершения вызова вызывающего метода, а если объект CallProviderDelegate будет освобожден, то дальнейшие сообщения делегатов CXProvider не будут доставлены.

Я бы проверял, что ваш объект CallProviderDelegate не был случайно освобожден первым.

+0

Да, я совершил эту ошибку и исправил ее позже. Забыл обновить нить. Спасибо, что нашли время, чтобы ответить Стюарту. – Rajavelu

+0

@ Rajavelu: не могли бы вы сообщить мне, как вы можете использовать интерфейс CallKit UI перед APp? –

+0

@SaurabhPrajapati Вам необходимо вызвать метод reportNewIncomingCall из делегата Provider. – Rajavelu