MSConversation 为我们提供了本地参与者和远程参与者。但是,我无法检索 self 或 other 的显示名称。我如何得到这些名字?
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 不同。

最佳答案

不幸的是,这无法检索任何名称。您唯一能做的就是检索本地和远程参与者的 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 来识别具有 CNContact 的任何用户,它们是不同的;)

关于swift - 如何在 MSConversation 中检索参与者的姓名?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38864157/

10-10 11:12