我有一个问题(但不是真的)与callkit。
我在我的应用程序中实现了callkit,它运行良好。我可以第二次打电话给我的应用程序和callkit,向我提供结束和接受,拒绝或保留和接受的选项。如果我正在进行蜂窝电话(gsm)呼叫并且我在我的应用上接听电话,那也是如此。但是当我在应用程序调用(在callkit上)并获得蜂窝(gsm)调用时,我只获得2个选项:拒绝或结束并接受。
知道为什么吗?或者我如何获得所有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.
在我的app委托中,我有检查useractivity的功能。我在所有函数中都放置了断点,但在显示传入蜂窝(gsm)调用的视图之前没有调用任何内容。
我用Google搜索但无法找到解决方案。据我所知,callkit工作正常。
对于传出电话我一直在努力。对于拨出电话,请确保在远程方应答后呼叫此方法:
[self.provider reportOutgoingCallWithUUID:currentCall.uuid connectedAtDate:[NSDate date]];
如果你不这样做,那么呼叫就会从CallKit的角度“连接”,我发现其他呼叫的本地呼入UI不会为另一个呼叫提供“发送到语音邮件”和“保持和接受”选项。是“连接”。
今天我一直在努力解决这个问题,直到我发现这一部分。我也在打电话:
[self.provider reportOutgoingCallWithUUID:currentCall.uuid startedConnectingAtDate:[NSDate date]];
从内部:
- (void)provider:(CXProvider *)provider performStartCallAction:(CXStartCallAction *)action
不确定这部分是否必要,但我这样做是因为这就是Speakerbox演示的功能。有点,他们在回调中做到了......我只是马上做。
当您在调用之前将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
有关的进一步帮助,请告诉我。