如何检索MSConversation中的参与者名称?

use*_*630 3 imessage nsuuid swift ios10

MSConversation为我们提供了本地参与者和远程参与者.但是,我无法检索自己或其他人的显示名称.我如何得到这些名字? https://developer.apple.com/reference/messages/msconversation

let ids = activeConversation?.remoteParticipantIdentifiers
let otherId = ids?[0].uuidString
let ownId = activeConversation?.localParticipantIdentifier.uuidString
let predicate = CNContact.predicateForContacts(withIdentifiers: [otherId!]);

do { 
    let contacts = try CNContactStore().unifiedContacts(matching: predicate, keysToFetch: [CNContactFamilyNameKey, CNContactGivenNameKey, CNContactNicknameKey, CNContactIdentifierKey])

    for contact in contacts{
        print(contact.givenName)
        print(contact.familyName)
        print(contact.identifier)
    }

} catch let err{
    print(err)
}
Run Code Online (Sandbox Code Playgroud)

如上所述,我试图搜索CNContactsStore,MSConversation中的UUID与CNContact不同.

Rom*_*One 7

不幸的是,这不可能检索任何名称.您唯一能做的就是检索本地和远程参与者的UUID.然后,您只能在会话的副本中显示名称.为此,当您设置新的MSMessage时,请不要忘记字符串中的符号$:

    let message = MSMessage(session: theCurrentSession)
    let layout = MSMessageTemplateLayout()
    layout.caption = "$\(uuidOfTheParticipant) said something"
    message.layout = layout
Run Code Online (Sandbox Code Playgroud)

注意:在目标C中,您不需要在"$"之后加上"\()",这仅在swift中使用;)

这将自动显示MSMessage底部相应UUID的名称.如果您想了解有关MSMessage布局的更多信息,请查看此处:https://developer.apple.com/reference/messages/msmessagetemplatelayout

此外,请记住,参与者的UUID与会话本身相关,它将与一个会话保持一致,但每个参与者的UUID将不同(在我的设备上识别我的UUID在其他设备上会有所不同).此外,如果用户卸载您的应用并重新安装它,则所有UUID都会有所不同.

因此,要回答您的问题,您不能依赖此UUID来识别具有CNContact的任何用户,它们是不同的;)

  • 确实如此,这在WWDC关于iMessage的视频中有所解释.参与者的名称将仅显示在对话的记录中,这意味着您可以设置它的唯一位置是MSMessage布局.由于它仍处于测试阶段,因此未来可能会实现更多功能...... (2认同)