CallKit外呼电话固定名称设置异常:为何仍显示remoteAddress
CallKit外呼自定义显示名称不生效的解决办法
你设置startCallAction.contactIdentifier = "Name"不生效的原因是:这个属性是用来关联系统通讯录联系人的标识符,不是直接设置显示名称的——只有通讯录里存在对应ID的联系人时,才会显示联系人名称,否则还是会用CXHandle的value(也就是你的remoteAddress)。
要实现固定显示自定义名称,需要在CXProviderDelegate的通话处理方法里主动更新通话的显示信息,具体操作:
- 在你的
CXProviderDelegate实现类中,添加/完善provider(_:perform:)方法,处理外呼请求时更新通话的displayName - 调用
provider.reportCall(with:updated:)将自定义名称同步到系统通话界面
修改后的完整代码示例:
原外呼函数(核心逻辑无需改动)
func outgoingCall(remoteAddress: String) { mProviderDelegate.incomingCallUUID = UUID() let handle = CXHandle(type: .generic, value: remoteAddress) let startCallAction = CXStartCallAction(call: mProviderDelegate.incomingCallUUID, handle: handle) startCallAction.isVideo = false let transaction = CXTransaction() transaction.addAction(startCallAction) mProviderDelegate.mCallController.request(transaction) { error in if let error = error { // 处理错误 } else { // 外呼请求提交成功 } } }
CXProviderDelegate中的关键处理代码
extension YourProviderDelegate: CXProviderDelegate { func provider(_ provider: CXProvider, perform action: CXStartCallAction) { // 创建通话更新实例,设置自定义显示名称 let callUpdate = CXCallUpdate() callUpdate.remoteHandle = action.handle callUpdate.displayName = "Name" // 这里设置你想要固定显示的名称 callUpdate.hasVideo = action.isVideo // 向系统报告通话更新,同步显示名称 provider.reportCall(with: action.callUUID, updated: callUpdate) // 完成外呼动作 action.fulfill() } // 其他Delegate方法(如providerDidReset等)按需保留 }
这样设置后,系统通话界面就会显示你指定的固定名称,而不是remoteAddress了。
内容的提问来源于stack exchange,提问作者steind.VY
相关产品推荐
相关产品推荐

