如何使用 CallKit API 映射社交资料

Posted

技术标签:

【中文标题】如何使用 CallKit API 映射社交资料【英文标题】:How to map social profile with CallKit API 【发布时间】:2016-10-10 11:29:08 【问题描述】:

现在我正在尝试将 CallKit 集成到现有的 VoIP 应用程序中。

根据 API,通过 CallKit 报告的每个调用都有一个与之关联的句柄。我们应用程序的用户可以进行音频和视频通话,这些通话是在帐户之间建立的,并且他们没有任何关联的“电话号码”,因此我们将通话句柄类型设置为“通用”,并使用一些特殊的帐户标识符作为这些句柄的值.这些用户帐户对用户不友好,不应显示在 UI 中。

所以自然希望在通话记录日志中显示真实的用户名。这就是我们遇到障碍的地方。

根据 WWDC 会议,社交资料将是集成 CallKit 的 VoIP 应用程序之间的一种链接,所以我的问题是如何创建社交资料并将其与 Callkit API 链接?

在检查了几个 VoIP 应用程序后,我认为使用这些信息创建新联系人不是正确的方法,因为我在联系人中找不到它们。

任何 cmets/建议/帮助将不胜感激!!!

提前致谢。

【问题讨论】:

【参考方案1】:

它的回复较晚,但它可能会对未来的观众有所帮助。您可以在 ProviderDelegate 中进行欺骗。只需使用您的手柄开始呼叫,无论您拥有 GenericPhoneNumber。并通过像

这样的开始呼叫操作向您发送被呼叫者姓名
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)
    

在此之后,主要技巧是在 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
    

来电设置CXCallUpdate的localizedCallerName

在您的通话记录中,它会显示类似

【讨论】:

您是如何获得不同的社交资料的?我的和我在 CXHandle 中设置的一样。

以上是关于如何使用 CallKit API 映射社交资料的主要内容,如果未能解决你的问题,请参考以下文章

如何使用流构建器和块模式更好地构建社交媒体应用程序

iOS10 Callkit框架整合总结

使用 CallKit 接听电话时如何显示 ViewController

如何在使用 Callkit 时播放声音,例如铃声?

使用 Callkit 接听电话后如何保持原生 UI

如何防止 Callkit 停止 AVAudioPlayer?