Messenger Library を利用した開発の基本
Windows Live Messenger Library を使用して、充実した機能を備えた Web ベースのメッセージング アプリケーションを作成することができます。このトピックでは、Web ベースのメッセージング アプリケーションを作成するときに処理するオブジェクトおよびイベントの概要を説明します。
Sign-in Control
Messenger セッションを開始する前に、ユーザーは Windows ID を使用して認証要求を行う必要があります。認証が完了すると、ユーザーは Messenger にサインインできるようになります。Sign-in Control のホスティングに関するコーディング作業がいくつかあります。
- Microsoft.Live.Messenger.UI.SignInControl のインスタンス化。これは、ホスト ページのロード時に実行する必要があります。
- Sign-in Control から発生する AuthenticationCompleted イベントへのサブスクライブ。これは、ホスト ページのロード時に実行する必要があります。
- AuthenticationCompleted イベントのイベント ハンドラの定義。このイベント ハンドラは以下のことを行う必要があります。
- Sign-in Control から受け取った AuthenticationCompletedEventArgs を使用して、User オブジェクトをインスタンス化します。
- User.SignInCompleted イベントにサブスクライブします。
- User.SignIn メソッドを呼び出します。
- User.SignInCompleted event のイベント ハンドラの定義。このイベント ハンドラは、ユーザーのメンバー リストの表示などの追加タスクの実行に使用できます。
サインイン時のイベント発生の流れは次のとおりです。
- ユーザーに対して Sign-in Control が表示されます。
- ユーザーがサインイン ボタンをクリックすると、Windows Live ID でサインインできるページにリダイレクトします。その後、さらにリダイレクトしてホストの Web ページに戻ります。
- AuthenticationCompleted イベントが発生し、関連するイベント ハンドラが呼び出されます。これで、User オブジェクトを使用する用意ができます。
- サインインが完了すると、User.SignInCompleted イベントが発生し、関連するイベント ハンドラが呼び出されます。
User オブジェクト
すべてのメッセージング アクティビティは、現在サインインしているユーザーを表す User オブジェクト (Microsoft.Live.Messenger.User クラス) に依存します。User オブジェクトへは、ユーザーへのアクセスを許可する唯一のメカニズムである Sign-in Control からアクセスすることができます。メンバーの追加と削除、メンバーのプレゼンス状態の監視、メッセージの送受信、および他のユーザーからの招待の受信をユーザーが行うことができるようにメンバー リストをユーザーに対してアクセス可能にする場合には、User オブジェクトを使用します。
User オブジェクトは、認証済みのユーザーがWindows Live ID を使用して Messenger サービスにサインインしたときに作成されます。ユーザーは、Sign-in Control を使用してのみサインインできます。User オブジェクトは Web ページが有効な間だけ存在します。1 人のユーザーがサインイン後にアクセスできる User のインスタンスは 1 つだけです。User オブジェクトは、ユーザーがページから移動するか、ページを更新するか、またはブラウザを閉じると存在しなくなります。
チャンネル ページとプライバシー ページ
チャンネル ページとプライバシー ページをホストするには、Sign-in Control を組み込んだ Web サイトが必要です。チャンネル ページは、アプリケーション ドメインと Windows Live サービス ドメイン ("live.com") の間のドメイン間通信を容易にします。このページのコードをここで紹介しますが、このコードは使用前に変更しないでください。プライバシー ページは、サイト訪問者に Web サイトのプライバシー ポリシーを表示します。以下のコード例は、チャンネル ページに使用するコードです。
Channel.htm
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>チャンネル</title>
<meta name="ROBOTS" content="NONE"/>
<script type="text/javascript">
try
{
var hash = window.location.hash.substr(1);
if (window.location.replace == null)
window.location.replace = window.location.assign;
window.location.replace("about:blank");
var name = hash.split("/")[0];
var win = null;
if (name && (name != ".parent"))
win = window.parent.frames[name];
else
win = window.parent.parent;
if (win.Microsoft) {
win.Microsoft.Live.Channels.Mux._recv_chunk(hash);
}
}
catch (ex)
{
/* 無視します */
}
</script>
</head>
<body></body>
</html>