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

时间:2016-08-10 04:19:44

标签: swift ios10 imessage nsuuid

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)
}

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

1 个答案:

答案 0 :(得分:7)

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

    let message = MSMessage(session: theCurrentSession)
    let layout = MSMessageTemplateLayout()
    layout.caption = "$\(uuidOfTheParticipant) said something"
    message.layout = layout

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

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

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

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