Как получить имена участников MSConversation?

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, UUID из MSConversation отличается от CNContact.


person user3774630    schedule 10.08.2016    source источник


Ответы (1)


К сожалению, получить какие-либо имена невозможно. Единственное, что вы можете сделать, это получить 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 для идентификации любого пользователя с помощью CNContact, они разные;)

person RomOne    schedule 10.08.2016
comment
спасибо за «волшебный» $(uuid), можете ли вы объяснить, как появляется долларовая часть? Я пока не могу найти реф. - person user3774630; 11.08.2016
comment
Хм, честно говоря, я действительно не знаю. Это исходит от WWDC, и я согласен с вами, это волшебный доллар. Я предполагаю, что это что-то из SDK. Если бы кто-то мог добавить еще несколько объяснений по этому поводу, было бы здорово :) - person RomOne; 11.08.2016
comment
Я просто пытался присвоить ему label.text, NSLog вообще не идет. Похоже, этот перевод специфичен для макета сообщения. Странный! - person user3774630; 11.08.2016
comment
Да, действительно, это объясняется в видео WWDC об iMessage. Имена участников будут отображаться только в расшифровке беседы, то есть единственное место, где вы можете установить его, — это макет MSMessage. Поскольку он все еще находится в стадии бета-тестирования, в будущем они могут реализовать больше функций... - person RomOne; 11.08.2016