Методы CXProviderDelegate не запускаются

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

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

Обратите внимание, что CallProviderDelegateпри создании экземпляра вызывается « » .@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); }]; }

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

В классе вызывающего абонента:

CallProviderDelegate

ios,objective-c,callkit,

2

Ответов: 1


2 принят

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

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

ИОС, Objective-C, callkit,
Похожие вопросы