我在我的Objective-C应用程序中使用CallKit。
我的问题是CallKit将来电保存在电话应用程序的历史记录中。有没有办法禁用此功能?
谢谢。
我正在创建一个VOIP应用程序.大多数逻辑类似于Raywenderlich教程.
我的问题是,在接受呼叫后,CXCallController它不在应用程序之上,而是在"任务管理器"旁边:
问题是,一旦你接受了呼叫,CXCallController它不是最顶层的控制器,而是实际的应用程序.所以你不能说这个电话正在发生.并执行有关呼叫的操作 - 例如挂断,保持,静音,您将不得不通过任务管理器打开CXCallController.用户不太友好.
CXCallController用户接听电话后如何将其置于前面?
在用户接听电话后调用的提供者代理:
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
guard let call = callManager.getCall(with: action.callUUID) else {
action.fail()
return
}
configureAudioSession()
self.incommingCall = call
action.fulfill()
}
Run Code Online (Sandbox Code Playgroud)
创建音频会话后的回调:
func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
incommingCall?.answerCall(with: audioSession) { success in
if success {
self.incommingCall?.startAudio()
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用TokBox VOIP服务启动调用逻辑:
func answerCall(with audioSession: AVAudioSession, completion: ((_ success: Bool) -> Void)?) {
OTAudioDeviceManager.setAudioDevice(OTDefaultAudioDevice.sharedInstance(with: audioSession))
if session == …Run Code Online (Sandbox Code Playgroud) 该reportNewIncomingCall完成参数不会被调用,这意味着我没有得到任何反馈,为什么我的VOIP应用程序不显示呼叫接收警报。
func reportIncomingCall(uuid: UUID, handle: String, hasVideo: Bool = false, completion: ((NSError?) -> Void)?) {
// 1.
let update = CXCallUpdate()
update.remoteHandle = CXHandle(type: .phoneNumber, value: handle)
update.hasVideo = hasVideo
// 2.
provider.reportNewIncomingCall(with: uuid, update: update) { error in
if error == nil {
// 3.
let call = Call(uuid: uuid, handle: handle)
self.callManager.add(call: call)
}
// 4.
completion?(error as? NSError)
}
}
Run Code Online (Sandbox Code Playgroud)
我尽可能准确地复制了代码。它适用于教程,但不适用于我的项目。
我正在完成WWDC CallKit会话,并且对它的概念很满意,但是不知道如何开始。
另外,我遵循了Apple Developers的CallKit示例代码,即SpeakerBox。但这是在Swift中。
需要建议!
提前致谢