Ios 有两个来电的CallKit

Ios 有两个来电的CallKit,ios,iphone,swift3,voip,callkit,Ios,Iphone,Swift3,Voip,Callkit,我用CallKit开发了一个VoIP应用程序 如果用户收到两个来电,并且他/她接受其中一个,则另一个来电将被关闭 例如,报告两个来电: reportInComingCall uuid: 70D506FB-6A9D-4111-8828-35DB8F330A26 reportInComingCall uuid: 129A6D67-AC6A-480E-BCD7-ED14F7961CE5 当用户接受其中一个时,我从CallKit获得以下操作: perform action: CXEndCall

我用CallKit开发了一个VoIP应用程序

如果用户收到两个来电,并且他/她接受其中一个,则另一个来电将被关闭

例如,报告两个来电:

reportInComingCall uuid: 70D506FB-6A9D-4111-8828-35DB8F330A26  
reportInComingCall uuid: 129A6D67-AC6A-480E-BCD7-ED14F7961CE5  
当用户接受其中一个时,我从CallKit获得以下操作:

perform action: CXEndCallAction uuid: 129A6D67-AC6A-480E-BCD7-ED14F7961CE5  
perform action: CXAnswerCallAction uuid: 70D506FB-6A9D-4111-8828-35DB8F330A26 
问:是否可以接受一个电话而不关闭另一个

最后,我需要以下场景: 当我接一个电话时,另一个一直保持等待,直到我挂断第一个电话。CallKit告诉我另一个我可以接受


拉尔夫

系统将让用户决定如何解决问题。根据选择,它将把多个操作打包到一个CXTransaction中。例如,如果用户选择结束正在进行的呼叫并接听新的呼叫,系统将为前者创建一个CXEndCallAction,为后者创建一个CXStartCallAction。这两个操作都将被包装到一个事务中并发送给提供者,提供者将分别处理它们。因此,如果您的应用程序已经知道如何满足个人请求,则无需采取进一步行动

您可以通过解决上述场景来测试它;电话列表将反映您的选择。该应用程序一次只能处理一个音频会话。如果您选择继续通话,另一个将自动挂起


有关更多信息,请参见您需要设置为
CXProviderConfiguration
,该应用程序允许呼叫分组和多个呼叫,如

let configuration = CXProviderConfiguration(localizedName: applicationName)
configuration.supportsVideo = supportsVideo
configuration.supportedHandleTypes = [.phoneNumber]
configuration.maximumCallGroups = 3
configuration.maximumCallsPerCallGroup = 2 /// 2 calls max per call group. Excluding host call
此外,您需要在接收来电时设置
CXCallUpdate
,以告知
CXProvider
来电可以保留/取消保留并分组

let callUpdate = CXCallUpdate()
callUpdate.supportsGrouping = true
callUpdate.supportsUngrouping = true
callUpdate.supportsHolding = true
每次您将要向
CXProvider

报告新的来电时,请使用该更新。在本项目中,SpeakerboxCallManager.swift用于在队列中添加多个来电。在reportIncomingCall()方法中,您可以在队列self.callManager.addCall(call)中添加调用,这样当您收到另一个调用时,CallKit将要求您放弃第一个调用或接受当前调用,希望我的回答对您有用。