2016-08-10 9 views
3

MSConversation дает нам местного участника и удаленных участников. Однако я не могу получить отображаемое имя себя или другого. Как получить эти имена? https://developer.apple.com/reference/messages/msconversationКак получить имя участников в 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, то UUID от MSConversation отличается от CNContact.

ответ

7

К сожалению, это невозможно для получения каких-либо имен. Единственное, что вы можете сделать, это получить UUID локальных и удаленных участников. Затем вы можете отображать там имена только в стенограмме разговора. Чтобы сделать это, когда вы установили новый MSMessage, не забудьте знак $ в строке:

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

Примечание: В объективном C вам не нужно ставить «\()» после «$», это используется только в swift;)

Это будет автоматически отображать имя соответствующего UUID в нижней части MSMessage. Посмотрите здесь, если вы хотите узнать больше о MSMessage макете: https://developer.apple.com/reference/messages/msmessagetemplatelayout

Кроме того, имейте в виду, что UUID от участника относительно самого разговора, он будет последовательны в один разговор, но будет разные для каждого участника (UUID, идентифицирующий меня на моем устройстве, будет другим на других устройствах). Также, если пользователь удалит ваше приложение и переустановит его, все UUID будут разными.

Так, чтобы ответить на ваш вопрос, вы не можете полагаться на этот UUID для identificate любого пользователя с CNContact, они разные;)

+0

спасибо за "волшебный«$ \ (UUID)», вы можете объяснить как возникает долларовая часть? Я еще не могу найти ссылку – user3774630

+0

Хмм честно, я действительно не знаю. Это происходит из WWDC, и я согласен с вами, это волшебный $. Я предполагаю, что это что-то происходит из SDK. Если бы кто-то мог добавить еще несколько объяснений, было бы здорово :) – RomOne

+0

Я просто попытался присвоить его label.text, NSLog all no go. Похоже, этот перевод относится к макету сообщений. Weird! – user3774630