如何通过 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")
}
}
}
我想通过 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")
}
}
}