[iOS 10] iMessage アプリで会話の参加者の情報を取得する

2016.10.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。モバイルアプリサービス部の平屋です。

本記事では「iMessage アプリ」から「会話の参加者」の情報を取得する方法を紹介します。

「iMessage アプリ」は iOS 10 から作成できるようになったアプリであり、iOS 組み込みの「メッセージ」アプリ上で動作します。

「iMessage アプリ」開発の基本事項については以下の記事などを参照してください。

取得できる情報

iMessage アプリから会話の参加者の UUID を取得できます。取得できる UUID は以下の 3 種類です。

  • 自分の UUID
  • 自分以外の会話の参加者の UUID (人数分)
  • メッセージの送信者の UUID

UUID の値は端末ごとに異なります。また、iMessage アプリを無効にしたり、収容アプリを削除したりすると UUID の値は別のものになります。

取得できる UUID を使用すれば、以下のような機能を実現できます。

  • 「自分以外の会話の参加者の UUID」の数をカウントして、会話の参加者の人数をチェックする
  • 「自分の UUID」と「メッセージの送信者の UUID」を比較して、自分が送ったメッセージかどうかをチェックする

「自分の UUID」と「自分以外の会話の参加者の UUID」を取得

「自分の UUID」を取得するには MSConversationlocalParticipantIdentifier プロパティを、「会話の参加者の UUID」を取得するには remoteParticipantIdentifiers プロパティを使用します。

override func willBecomeActive(with conversation: MSConversation) {
    // 自分の UUID を取得
    print("localParticipantIdentifier:\(conversation.localParticipantIdentifier)")

    // 自分以外の会話の参加者の UUID を取得
    print("remoteParticipantIdentifiers:\(conversation.remoteParticipantIdentifiers)")
}

例えば、会話の参加者が 2 人の場合 localParticipantIdentifier, remoteParticipantIdentifiers プロパティの値は以下のようになります。

// localParticipantIdentifier, remoteParticipantIdentifiers の値の例
localParticipantIdentifier:27FBEBF3-1BFB-451D-BFC0-F73A2CFB033B
remoteParticipantIdentifiers:[6F9D9D4A-CAC7-4549-B2F9-65912A2EE3D9]

「メッセージの送信者の UUID」を取得

「メッセージの送信者の UUID」を取得するには MSMessagesenderParticipantIdentifier プロパティを使用します。

override func didReceive(_ message: MSMessage, conversation: MSConversation) {
    print("message.senderParticipantIdentifier:\(message.senderParticipantIdentifier)")
}
// senderParticipantIdentifier の値の例
message.senderParticipantIdentifier:6F9D9D4A-CAC7-4549-B2F9-65912A2EE3D9

UUID を「連絡先アプリに登録されている氏名」に変換する

MSMessageTemplateLayout のテキスト関連のプロパティに格納する値の中に $\(<UUID 文字列>) を含めると、UUID の文字列が「連絡先アプリに登録されている氏名」に置き換わります。連絡先アプリに登録されていない場合は、メールアドレスや電話番号に置き換わります。

MSMessagesummaryText プロパティについても同様に置き換わります。

以下の例では、MSMessageTemplateLayoutcaption プロパティに格納する値の中に $\(<UUID 文字列>) を含めています。

// MSMessageTemplateLayout 作成
let layout = MSMessageTemplateLayout()
layout.image = UIImage(named: "image.jpg")
layout.caption = "これは$\(self.activeConversation!.localParticipantIdentifier.uuidString)のメッセージです"

// MSMessage 作成
let message = MSMessage()
message.layout = layout
// message.summaryText = "$\(self.activeConversation!.localParticipantIdentifier.uuidString)がメッセージを送信しました"

// ...

上記コードを実行すると、以下のような結果になります。

ios-10-message-extension-participant-info-1

さいごに

本記事では「iMessage アプリ」から「会話の参加者」の情報を取得する方法を紹介しました。今後も引き続き、iMessage アプリの機能を試していきたいと思います。

参考