在CallKit UI中隐藏FaceTime按钮

时间:2016-12-20 15:18:24

标签: ios swift callkit

我在VoIP应用程序中实现了CallKit支持。

我可以通过在supportsVideo中将false设置为CXProviderConfiguration来停用视频按钮。现在出现了FaceTime按钮。

我想知道是否有办法在默认用户界面中禁用FaceTime按钮,因为该应用正在处理与FaceTime无关的内部企业号码。

更新: 如下面的答案中所述,可以禁用按钮,但来电号码丢失(显示为Unknown)。我想保留数字并禁用FaceTime按钮。

更新: 在iPhone设置中禁用FaceTime会禁用FaceTime按钮。但是,它不是解决问题的有效方法。

更新: 对CXHandle类型的任何更改(包括插入对电话号码无效的字符)都不会影响问题 - 仍会显示FaceTime按钮。

4 个答案:

答案 0 :(得分:3)

在好消息/坏消息中,我可以通过清除remoteHandle(未删除或隐藏,仅显示为灰色)来禁用FaceTime按钮。

但是,作为副作用,如果您未设置localizedCallerName的{​​{1}}属性,则来电者会显示为“未知”。
没有手柄的呼叫将产生不能在最近按下的可按压的副作用。

CXCallUpdate

答案 1 :(得分:1)

我把头发拉出来解决这个问题,取消remoteHandle会禁用按钮,但你不能再从系统调用历史记录中调用了。

最后想出了一个完美的解决方案,我想分享。

假设我们同时支持音频/视频。

  1. 初始CXProviderConfiguration

    let providerConfiguration = CXProviderConfiguration(localizedName: "yourConfigName")
    providerConfiguration.supportsVideo = supportsVideo
    providerConfiguration.supportedHandleTypes = [.generic, .phoneNumber, .emailAddress] // Pick your own supportedHandleTypes.
    
  2. 报告来电时排除remoteHandle

    let update = CXCallUpdate()
    
    // Set hasVideo so it shows correct type on incomingCall screen.
    update.hasVideo = supportsVideo
    
    // Exclude remoteHandle so that the FaceTime button is disabled
    // update.remoteHandle = CXHandle(type: .generic, value: yourHandle)
    
  3. 重要!func provider(_ provider: CXProvider, perform action: CXEndCallAction)委托中结束通话时更新remoteHandle。

  4. 当reportIncomingCall失去从系统调用历史记录调用的功能时,排除remoteHandle。 但您可以在结束通话之前更新通话并进行设置。

     func provider(_ provider: CXProvider, perform action: CXEndCallAction) {
        let update = CXCallUpdate()
    
        // Set the remoteHandle, so you can call from System Call History
        update.remoteHandle = CXHandle(type: .generic, value: yourHandle)
        provider.reportCall(with: uuid, updated: update)
    
        action.fulfill()
    } 
    

答案 2 :(得分:0)

通过清除remoteHandle可以真正禁用FaceTime按钮,因为@Eli Burke说,但副作用是禁用来自最近的调用。我不知道为什么。

答案 3 :(得分:0)

我通过遵循与disabling the "Add Call" button相同的方法禁用了FaceTime按钮,这不会破坏来电者姓名功能,但奇怪的是,如果用户触摸扬声器按钮,FaceTime按钮会再次激活。我不明白为什么这种行为不是Apple的错误,所以我只是放弃了正确的修复。

编辑:原因如下:只有在建立了通话后,我才将CXHandle归因于CXCallUpdate,因此首先禁用FaceTime按钮,因为没有CXHandle。激活扬声器按钮以某种方式强制CallKit UI中的更新 - 此时,已经存在CXHandle,因此FaceTime按钮将被启用。