2

CallKit を Voip アプリに統合しようとしています。Apple WWDC の SpeakerBox サンプルコードを参考にしました。ProviderDelegate クラスを作成し、メソッドを呼び出した後に着信 UI を確認できます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) {
            //
 }];
4

1 に答える 1

2

「呼び出し元」クラス、つまりCallProviderDelegateクラスをインスタンス化して変数に割り当てるコードで、オブジェクト参照をインスタンス変数またはプロパティにproviderDelegate格納していますか? providerDelegate一時的なローカル変数にのみ割り当てられている場合はCallProviderDelegate、呼び出し元のメソッドの実行が終了した後にオブジェクトのCallProviderDelegate割り当てが解除されます。オブジェクトの割り当てが解除された場合、CXProvider デリゲート メッセージはそれ以上配信されません。

CallProviderDelegate最初に、オブジェクトが誤って割り当て解除されていないことを確認します。

于 2016-10-16T18:45:53.250 に答える