アプリケーションコンタクト
Live Messenger Web Toolkitを利用するとLive Messengerと連携したSNSなどのWebサイトも作れます。メンバー管理やメッセージング機能はそのままLive Messengerのものを使用することができそうですね。しかし、
多くのSNSではメールアドレスを知らせずにメッセージのやりとりができ、
アプリケーションコンタクトはUI Controlsとして提供されています。用意されているコントロールは次のふたつです。
- Application Contactsコントロール
- Application Contactコントロール
前者のApplication Contactsコントロールは、
Messenger Application Keyの取得
アプリケーションコンタクトを使用するには、
Messenger Application Key取得には、
Messenger Application Keyは、
https://consent.messenger.services.live.com/applicationsettings.aspx?appid=0x{appid}
上記URLのサイトは図1のようになっています。このページでは、

アプリケーションコンタクトの作成
それでは、
Application Contactsコントロール
アプリケーションコンタクトを有効にするにはApplication Contactsコントロールを使用します
<msgr:app-contacts
contacts="..."
signature="..."
on-set-contacts-completed="...">
</msgr:app-contacts>
contacts属性には、
アプリケーションコンタクトリスト
アプリケーションコンタクトリストは、
<Ticket>
<Contact id="64801418014"/>
<Contact id="44801418141"/>
<Contact id="11447918014"/>
<Contact id="-35143418014"/>
<Contact id="-89571418014"/>
<Contact id="58711418014"/>
<TS>2010-07-20T12:34:56Z</TS>
</Ticket>
<Ticket>要素の中に、
このXML文書の文字列を先ほどのApplication Contactsコントロールのcontacts属性に指定します。指定する際は、
CIDの配列からアプリケーションコンタクトの属性値を生成するメソッド例を以下に示します。
Public Function CreateApplicationContactList(ByRef cids() As Long) As String
Dim contactCids =
For Each cid In cids
contactCids &= String.Format("<contact id="" {0}""="">", cid)
Next
Return String.Format("<ticket>{0}<ts>{1}</ts></ticket>", contactCids, DateTime.UtcNow.ToString("o"))
End Function
使用するときは、
' アプリケーションコンタクトリストのメンバー CID
Dim cids() As Long = New Long() {5566738540414425322, _
-6356285628991451204, _
-5771274640885475729}
' アプリケーションコンタクトリスト
Dim list = CreateApplicationContactList(cids)
アプリケーションコンタクトリストの署名
続いてsignature属性値の生成方法をみてみましょう。値は、
実は、
' Imports System.Security.Cryptography
Public Shared Function CreateSignature(ByVal messengerApplicationKey As String, ByVal applicationContactList As String) As String
Dim key = Derive(messengerApplicationKey, "SIGNATURE")
Dim hashAlgorithm = New HMACSHA256(key)
Dim data = System.Text.Encoding.Default.GetBytes(applicationContactList)
Return Convert.ToBase64String(hashAlgorithm.ComputeHash(data))
End Function
Public Shared Function Derive(ByVal secretKey As String, ByVal prefix As String) As Byte()
Dim hashAlgorithm = New SHA256Managed
Dim buffer = System.Text.Encoding.Default.GetBytes(prefix & secretKey)
Dim hashOutput = hashAlgorithm.ComputeHash(buffer)
Dim byteKey(15) As Byte
Array.Copy(hashOutput, byteKey, byteKey.Length)
Return byteKey
End Function
使用方法は以下の通りです。
' list: アプリケーションコンタクトリスト
Dim signature = CreateSignature("取得したMessengerApplicationKey", list)
Application Contactsコントロールの動作確認
以上でApplication Contactsコントロール動作に必要な値の生成ができました。実際に使用してアプリケーションコンタクトが有効になるか確認してみましょう。
アプリケーションコンタクトリストのXML文書と、
Dim s = HttpUtility.HtmlAttributeEncode(signature)
Dim l = HttpUtility.HtmlAttributeEncode(list)
Dim tag = String.Format("<msgr:app-contacts contacts="{0}" signature="{1}"></msgr:app-contacts>", l, s)
動作確認には、
それぞれのユーザー用に設定したApplication Contactsコントロールを含むXHTMLを提示するようにします。片方のユーザーには相手のCIDを用いてアプリケーションコンタクトリストを作ります。もう片方のユーザーも同様に相手のCIDを用いてアプリケーションコンタクトリストを作ります。
確認にはコンタクトリストの表示と会話が必要ですので、
片方のユーザーに提示するXHTMLの<body>内の例を以下に示します。
<body>
<msgr:app
id="appTag"
application-verifier-token="<%= ApplicationVerifier %>"
privacy-url="Privacy.html"
channel-url="Channel.html"
token-url="RefreshMessengerToken.aspx"
onAuthenticated="onAuthenticated"
onSignedIn="onSignedIn">
</msgr:app>
<msgr:app-contacts
contacts='<Ticket><Contact id="5566738540414425322"
/><TS>2010-02-22T22:22:22.0000000Z</TS></Ticket>'
signature='求めたsignature値'>
</msgr:app-contacts>
<msgr:bar></msgr:bar>
</body>
それでは、

サインインした場合、
図ではMessenger Web Barコントロールを使用しましたが、
確認する目的では各ユーザー用に直接XHTMLを記述して行うこともできますが、
Application Contactコントロール
もうひとつのアプリケーションコンタクトに関するApplication Contactコントロールも使ってみましょう。このコントロールを使用するとユーザーの表示名や表示アイコンをWebサイト上でのみ異なる名前やアイコンにできます。
XHTMLに記述するタグは次のようになります。
<msgr:app-contact
cid="-0123456789"
contact-list-enabled="true"
display-name="あやの"
display-picture-url="http://example.jp/images/ayano.png"
personal-message="頑張ろうよ">
</msgr:app-contact>
cid属性には、
ProfileコントロールとApplication Contactコントロールを組み合わせて動作を確認してみましょう。実行結果を図3に示します。

実行してみると気付くのではないかと思いますが、
また、
今回は以上です。いかがでしたでしょうか。アプリケーションコンタクトというLive Messenger Web Toolkitだけに用意された機能を紹介しました。アプリケーションコンタクトを使用するとSNSなどのサービス作成も可能であることがわかったのではないでしょうか。次回もLive Messenger Web Toolkitを用いた開発を紹介する予定です。