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,MSConversation中的UUID与CNContact不同。
答案 0 :(得分:7)
不幸的是,无法检索任何名称。您唯一能做的就是检索本地和远程参与者的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都会有所不同。
因此,要回答您的问题,您不能依赖此UUID来识别具有CNContact的任何用户,它们是不同的;)