2016-08-10 5 views
3

MSConversationは、ローカル参加者とリモート参加者を提供します。ただし、自己または他の表示名を取得することはできません。これらの名前はどのように入手できますか? https://developer.apple.com/reference/messages/msconversationMSConversationの参加者名を取得するにはどうすればよいですか?

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は異なっています。

答えて

7

残念ながら、これは任意の名前を取得することはできません。あなたが行うことができる唯一のことは、ローカルとリモートの参加者のUUIDを取得することです。その後、には、会話のトランスクリプトにのみ名前を表示することができます

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

注:あなたが「\()」を入れる必要はありません客観Cで 後の新しいMSMessageを設定する際にこれを行うには、文字列中の記号$を忘れないでください"$"、これはswiftでのみ使用されます)

これは、対応するUUIDの名前をMSMessageの下部に自動的に表示します。また、https://developer.apple.com/reference/messages/msmessagetemplatelayout

参加者のUUIDが会話自体に相対的であることに注意してください、それは1人の会話に一貫されますが、次のようになります。あなたはMSMessageのレイアウトについての詳細を知りたい場合は、ここを見て参加者ごとに異なります(私のデバイス上の私を識別するUUIDは、他のデバイスでは異なります)。また、ユーザーがあなたのアプリをアンインストールして再インストールした場合、すべてのUUIDは異なるでしょう。

ですから、CNContactを持つすべてのユーザーをidentificateするために、このUUIDに依存することはできませんあなたの質問に答えるために、彼らは異なっている;「)魔法」「$ \(UUID)」の

+0

おかげで、あなたが説明することができますドルの部分はどうなるの?私はまだrefを見つけることができません – user3774630

+0

正直なところ、私は本当に知りません。これはWWDCから来て、私はあなたに同意する、それは魔法の$です。私はそれがSDKからのものだと思う。誰かがそれについていくつかの説明を加えることができたら、それは素晴らしいでしょう:) – RomOne

+0

私はlabel.textにそれを割り当てようとしました。この翻訳はメッセージレイアウトに固有のようです。奇妙な! – user3774630

関連する問題