CallKit有两个来电

时间:2017-06-15 08:34:46

标签: ios iphone swift3 voip callkit

我使用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向我展示了我可以接受的另一个。

拉​​尔夫

2 个答案:

答案 0 :(得分:1)

您需要将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

报告新的来电时,请使用该更新

答案 1 :(得分:0)

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

您可以通过解决上面的场景来测试它;通话清单将反映您的选择。该应用程序一次只能处理一个音频会话。如果您选择继续通话,则另一个将自动暂停。

有关详情,请点击that tutorial