首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蜂窝来电时保留callkit呼叫

蜂窝来电时保留callkit呼叫
EN

Stack Overflow用户
提问于 2018-08-09 18:01:41
回答 2查看 2.1K关注 0票数 7

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

我在我的应用程序中实现了callkit,它工作得很好。我可以再次呼叫我的应用程序,callkit为我提供了结束并接受、拒绝或保留并接受的选项。如果我正在进行移动(gsm)呼叫,并且在我的应用程序上收到一个呼叫,情况也是如此。但是当我在app call (在callkit上)并得到一个蜂窝(Gsm)呼叫时,我只有两个选择:拒绝或结束&接受。

知道为什么吗?或者我如何才能获得所有3个选项?

代码语言:javascript
复制
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
}

我已经实现了:

代码语言:javascript
复制
providerDidReset, 
CXStartCallAction, 
CXAnswerCallAction, 
CXEndCallAction, 
CXSetHeldCallAction, 
CXSetMutedCallAction, 
timedOutPerforming action, 
didActivate audioSession, 
didDeactivate audioSession.

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

我用谷歌搜索了一下,但找不到解决方案。据我所知,callkit工作得很好。

EN

回答 2

Stack Overflow用户

发布于 2018-09-06 03:35:59

我在打出电话时遇到了这个问题。对于传出呼叫,请确保在远程端应答后为该呼叫调用此方法:

代码语言:javascript
复制
[self.provider reportOutgoingCallWithUUID:currentCall.uuid connectedAtDate:[NSDate date]];

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

我今天在这个问题上挣扎了一段时间,直到我弄明白了这一点。我也在打电话给你:

代码语言:javascript
复制
 [self.provider reportOutgoingCallWithUUID:currentCall.uuid startedConnectingAtDate:[NSDate date]];

从内部:

代码语言:javascript
复制
- (void)provider:(CXProvider *)provider performStartCallAction:(CXStartCallAction *)action

我不确定这部分是否有必要,但我之所以这样做,是因为扬声器演示就是这样做的。在某种程度上,他们是在回调中做的。我马上就去做。

票数 1
EN

Stack Overflow用户

发布于 2018-08-21 18:33:40

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

我的CXCallUpdate如下所示:

代码语言:javascript
复制
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的帮助,请告诉我。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51764123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档