Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

like image 269
user3774630 Avatar asked Aug 10 '16 04:08

user3774630


1 Answers

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 "\( )" after the "$", 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 : https://developer.apple.com/reference/messages/msmessagetemplatelayout

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 answer your question you can not rely on this UUID to identificate any user with the CNContact, they are different ;)

like image 91
RomOne Avatar answered Oct 13 '22 12:10

RomOne