如何以编程方式拒绝来电

问题描述 投票:0回答:0

我有一个可以正常通话的 VoIP 应用程序。

但是,当我们有一个活动的 VoIP 通话并且用户收到一个正常的 PSTN 通话时,活动的 VoIP 通话变为空白 - 任何一方都听不到音频。

为了解决这个问题,我们决定以编程方式结束新的来电,我成功地检测到了 PSTN 来电。但是当我尝试结束通话时,我收到错误提示:

EndCallAction transaction request failed: The operation couldn’t be completed. (com.apple.CallKit.error.requesttransaction error 4.)

错误代码4是指

CXErrorCodeRequestTransactionErrorUnknownCallUUID
.

下面是我的代码:

// called during initialization
self.callObserver = [[CXCallObserver alloc] init];
[self.callObserver setDelegate:self queue:dispatch_get_main_queue()];
- (void)callObserver:(nonnull CXCallObserver *)callObserver callChanged:(nonnull CXCall *)call {
    // isCallInProgress static variable tracks if a VoIP call is active and I verified its value - works as expected
    if(isCallInProgress) {
        if(!call.isOutgoing && !call.hasConnected && !call.hasEnded) {
            NSLog(@"*** New incoming call detected while a call is in progress - so reject it");
            dispatch_async(dispatch_get_main_queue(), ^{
                CXEndCallAction *endCallAction = [[CXEndCallAction alloc] initWithCallUUID:call.UUID];
                CXTransaction *transaction = [[CXTransaction alloc] initWithAction:endCallAction];

                CXCallController *controller = [[CXCallController alloc] init];
                [controller requestTransaction:transaction completion:^(NSError *error) {
                    if (error) {
                        NSLog(@"*** EndCallAction transaction request failed: %@", [error localizedDescription]);
                    }
                    else {
                        NSLog(@"*** EndCallAction transaction request successful");
                    }
                }];
            });
        }
    }
} 

接下来我可以尝试什么?

ios objective-c voip callkit
© www.soinside.com 2019 - 2024. All rights reserved.