蜂窝电话打进时保持callkit通话

时间:2018-08-09 10:01:41

标签: ios swift callkit

我对callkit有问题(但不是真的)。

我在应用程序中实现了callkit,效果很好。我可以再次拨打我的应用程序,而呼叫工具包为我提供了End&Accept,Decline或Hold&Accept选项。如果我正在通过蜂窝(gsm)通话并且在我的应用上接到了电话,情况也是如此。但是,当我进入应用程序通话(在Callkit上)并进行蜂窝电话(gsm)通话时,我只有两种选择:拒绝或结束并接受。

知道为什么吗?或我如何才能获得全部3个选择?

static var providerConfiguration: CXProviderConfiguration {

    var providerConfiguration: CXProviderConfiguration
    providerConfiguration = CXProviderConfiguration(localizedName: "app name")

    providerConfiguration.supportsVideo = false
    providerConfiguration.maximumCallsPerCallGroup = 1
    providerConfiguration.maximumCallGroups = 3
    providerConfiguration.supportedHandleTypes = [.phoneNumber]
    return providerConfiguration
}

我已经实现:

providerDidReset, 
CXStartCallAction, 
CXAnswerCallAction, 
CXEndCallAction, 
CXSetHeldCallAction, 
CXSetMutedCallAction, 
timedOutPerforming action, 
didActivate audioSession, 
didDeactivate audioSession.

在我的应用程序委托中,我具有检查用户活动的功能。我在所有函数中都设置了断点,但是在显示传入的蜂窝(gsm)调用的视图之前,没有任何调用。

我用Google搜索,但找不到解决方案。据我所知,callkit运行良好。

2 个答案:

答案 0 :(得分:0)

我为此苦苦挣扎。对于拨出电话,请确保在远程端接听电话后调用此方法:

[self.provider reportOutgoingCallWithUUID:currentCall.uuid connectedAtDate:[NSDate date]];

如果您不这样做,那么从CallKit的角度来看,该呼叫将被“连接”,并且我发现 other 呼叫的本机来电UI将不会提供“发送到语音信箱”和“保留”并在另一个呼叫“正在连接”时接受”选项。

我今天为此苦了一段时间,直到我找出那部分。我也在打电话:

 [self.provider reportOutgoingCallWithUUID:currentCall.uuid startedConnectingAtDate:[NSDate date]];

来自内部:

- (void)provider:(CXProvider *)provider performStartCallAction:(CXStartCallAction *)action

不确定那部分是否必要,但是我正在做,因为这是Speakerbox演示的工作。有点,它们是在回调中执行的...我只是立即执行。

答案 1 :(得分:-1)

在调用之前将CXCallUpdate对象发送到CallKit时,请确保将supportsHolding的值保留为true

我的CXCallUpdate如下所示:

let callHandle = CXHandle(type: .phoneNumber, value: handle)
let callUpdate = CXCallUpdate()
if userName != nil{
       callUpdate.localizedCallerName = userName;
}
callUpdate.remoteHandle = callHandle
callUpdate.supportsDTMF = true
callUpdate.supportsHolding = true
callUpdate.supportsGrouping = false
callUpdate.supportsUngrouping = false
callUpdate.hasVideo = false  

以上不同属性的含义:

localizedCallerName =如果要在系统的呼叫屏幕上显示用户名,否则将根据句柄类型显示电话号码/电子邮件

supportsDTMF =在系统的主屏幕上,如果要允许在通话过程中键入键盘数字,则将其设置为false,将禁用键盘选项。

supportsHolding =如果您希望保持呼叫,则在触发其他一些呼叫时,请保留此属性true

supportsGrouping =如果要允许电话会议(在呼叫屏幕中启用了合并呼叫选项),请保留此true

supportsUngrouping =最后一个的倒数,在电话合并之后(电话会议),应允许其取消分组。

hasVideo =如果您支持视频通话,系统将自动为您启动摄像头。

@Redssie,如果需要与Callkit相关的其他帮助,请告诉我。