现在我正在尝试将 CallKit 集成到现有的 VoIP 应用程序中。
根据 API,通过 CallKit 报告的每个调用都有一个与之关联的句柄。我们应用程序的用户可以进行音频和视频通话,这些通话是在帐户之间建立的,并且没有任何关联的“电话号码”,因此我们将通话句柄类型设置为“通用”,并使用一些特殊的帐户标识符作为这些句柄的值。这些用户帐户对用户不友好,不应显示在 UI 中。
因此,人们自然希望在通话历史记录中显示真实的用户名。这就是我们遇到障碍的地方。
根据 WWDC 会议,社交配置文件将成为集成 CallKit 的 VoIP 应用程序之间的一种链接,所以我的问题是如何创建社交配置文件并将其与 Callkit API 链接?
在检查了几个 VoIP 应用程序后,我认为这不是使用这些信息创建新联系人的正确方法,因为我在联系人中找不到它们。
任何评论/建议/帮助将不胜感激!
提前致谢。
小智 5
虽然回复晚了,但可能会对未来的观众有所帮助。你可以在 ProviderDelegate 中欺骗这个。只需使用您的句柄开始通话,无论您有Generic OR PhoneNumber。并向您发送被叫者姓名以及开始通话操作,例如
public func startCall(handle: String,contactIdentifier:String/*Your Callee Name*/, video: Bool = false) {
let handle = CXHandle(type: .Generic, value: handle)
let startCallAction = CXStartCallAction(callUUID: NSUUID(), handle: handle)
startCallAction.video = video
startCallAction.contactIdentifier = contactIdentifier //Callee name goes with action so we can get in Delegate
let transaction = CXTransaction()
transaction.addAction(startCallAction)
requestTransaction(transaction)
}
Run Code Online (Sandbox Code Playgroud)
之后的主要技巧是更新您在ProviderDelegate中的StartCallAction中的调用
public func provider(provider: CXProvider, performStartCallAction action: CXStartCallAction) {
let update = CXCallUpdate()
update.remoteHandle = action.handle
update.hasVideo = action.isVideo
update.localizedCallerName = action.contactIdentifier //Here contactIdentifier is assigned callee name on start call
self.provider.reportCall(with: action.callUUID, updated: update)
// Rest of your code
}
Run Code Online (Sandbox Code Playgroud)
对于来电,设置CXCallUpdate的 localizedCallerName
在您的通话记录中,它会显示类似的内容
| 归档时间: |
|
| 查看次数: |
1578 次 |
| 最近记录: |