如何通过 callkit 结束对 iOS 的 phone 调用?

How to end a phone call on iOS by callkit?

我想通过 callkit api 结束 phone 通话。但是我得到了这个信息"com.apple.CallKit.error.requesttransaction error 4"。我不知道为什么以及会发生什么。顺便说一下,phone 通话是真实通话,不是 VOIP 通话。

CallKit CXError.h CXErrorCodeRequestTransactionErrorUnknownCallUUID 4

准备,为 com.apple.CallKit.error.requesttransaction 错误 1 启用 voip 并创建全局变量 CXCallController *callController

首先,我使用CXCallObserver get call UUID

- (void)callObserver:(CXCallObserver *)callObserver callChanged: (CXCall *)call {
}

接着,我用一些api来结束phone,我把它放在callObserver

    NSUUID *callUUID = call.UUID;
    CXEndCallAction *endaction = [[CXEndCallAction alloc] initWithCallUUID:callUUID];
    CXTransaction *transaction = [[CXTransaction alloc] initWithAction:endaction];

    [self.callController requestTransaction:transaction completion:^(NSError * _Nullable error) {
        if (error) {
            NSLog(@"EndCallAction transaction request failed: %@", [error localizedDescription]);
        } else {
            NSLog(@"EndCallAction transaction request successful");
        }
    }];

我终于明白了。 PS: UUID 不为空

我已经引用了 。但是没有用。我不知道。请帮助或尝试提供一些想法如何实现这一目标。谢谢!

您只能使用 CallKit 来管理由您的应用程序建立的 VoIP 呼叫。您无法管理来自其他应用程序的蜂窝电话或 VoIP 电话。

Apple 文档似乎建议可以暂停电话呼叫 https://developer.apple.com/documentation/callkit/cxcall 但这似乎对我不起作用。如果它应该有效,它也应该适用于结束通话。

我也尝试了上面的方法,即使 CallObserver 从调用列表中给出了调用 UUID,它也显示了上面的错误。

但是想知道如果您有一个 VOIP 应用程序并且您正在进行现有的电话呼叫,并且您想要 hold/end 电话呼叫并接听来电(来自您的 VOIP 应用程序),这将如何工作.

你必须通过传递 uuid 来调用下面的函数

func performEndCallAction(uuid: UUID) {

    let endCallAction = CXEndCallAction(call: uuid)
    let transaction = CXTransaction(action: endCallAction)

    callKitCallController.request(transaction) { error in
        if let error = error {
            NSLog("EndCallAction transaction request failed: \(error.localizedDescription).")
        } else {
            NSLog("EndCallAction transaction request successful")
        }
    }
}