user3774630 user3774630 - 1 year ago 228
Swift Question

How do I retrieve the name of participants in MSConversation?

MSConversation gives us the local participant and remote participants. However, I am unable to retrieve the display name of self or other. How do I get these names?

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{

} catch let err{

As above I have tried to search CNContactsStore, the UUID from MSConversation is different from CNContact.

Answer Source

Unfortunately this is not possible to retrieve any names. The only thing you can do is retrieving the UUID of the local and remote participants. Then you can display there names only into the transcript of the conversation. To do so, when you set a new MSMessage, don't forget the sign $ in the string :

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

Note : In objective C you don't need to put "\()", this is used only in swift ;)

This will automatically display the name of the corresponding UUID at the bottom of the MSMessage. Have a look here if you want to learn more about the MSMessage layout :

Also, keep in mind that the UUID of the participant is relative to the conversation itself, it will be consistant into one conversation, but will be different for each participants (the UUID identifying me on my device will be different on others devices). Also if a user uninstall your app and reinstall it, all UUID will be different.

So to reply to your question you can not rely to this UUID to identificate any user with the CNContact, they are different ;)