Windows Live ID を使った Windows 8 へのサインインを扱った前回の記事に続いて、Windows 8 の新しい Metro スタイル アプリから SkyDrive を利用する方法についてお話ししたいと思います。SkyDrive は設定やアプリ自体のローミングのためにいくらかは自動的に利用されることになりますが、開発者の方は、アプリケーションで作成したデータをユーザーがデバイス間で簡単にローミングできるようにしたいと考えられていると思います。すべての Windows Live ID に付属する無料のクラウド ベース ドライブである SkyDrive は、それを実現する手段として最適です。この記事では、アプリ内部から SkyDrive ストレージを利用できる Metro スタイル アプリの開発についてご紹介します。これは実際のコードが入った初の記事となります。今後もこういった記事はどんどん投稿していきますので、ご期待ください! この記事は、SkyDrive Devices and Roaming (SkyDrive デバイスおよびローミング) チームのグループ プログラム管理者である Mike Torres が執筆しました。--Steven

1 人のユーザーが複数のデバイスを使い分ける傾向は強まっていますが、多くのユーザーはまだ重要なファイルをすべて 1 つの PC や記憶装置に保存しており、他のデバイスからはアクセスできません。デスクトップ PC、ノート PC、USB キーといった 1 つの「場所」にファイルが関連付けられており、その場所にアクセスできなければ、ドキュメントや写真にアクセスすることはできない状態です。ファイルへのアクセスが困難 (場合によっては不可能) というだけでなく、別のネットワーク上のだれかとファイルを共有するのもやはり難しい作業となります。

クラウドのおかげで、ユーザーがどこからでもコンテンツにアクセスすることが可能に (そして簡単に) なってきています。ファイルは 1 つの場所に保存され、インターネットに接続可能なデバイスであれば、世界中のどこからでもアクセスすることができます。いくつものコピーを作成する必要はなく、1 つのファイルをクラウドに置くことで、写真の共有や、ドキュメントでリアルタイムに共同作業を行うことも容易になりました。しかし、コンテンツへのアクセス方法として、クラウドが主流となるには至っていません。

//build/ カンファレンスのオープニングの基調講演で Chris Jones が話したとおり、Windows 8 ユーザーにはすべて SkyDrive が提供されます。SkyDrive はだれもが共通して使えるクラウドとなり、ユーザーにとって重要なファイルは一元的に利用でき、瞬時にアクセス可能で、簡単に共有することができます。また、カンファレンス中の他のセッションでは、Windows 8 の開発者が Live Connect と Live SDK を使ってアプリにクラウド機能を組み込む方法についても触れました。Metro スタイル アプリと Live クラウドを組み合わせることで Windows Live ID によるシングル サインオンが可能になり、ユーザーの許可があれば、SkyDrive に置かれたドキュメント、写真、ビデオなどの個人データに、アプリからアクセスすることができます。

Windows 8 で Metro スタイル アプリを開発することを検討されている場合、この記事でご紹介する方法でシングル サインオンを利用し、SkyDrive 上のユーザー データに (もちろんユーザーの合意に基づいて) アクセスすることで、よりパーソナルなエクスペリエンスを実現する Metro スタイル アプリを開発することができます。

Live クラウドにアプリを接続する

開発者として次なるすばらしいアプリを世に送り出すにあたって、どのプラットフォームでも繰り返し行き当たる問題が 2 つあります。

  • ユーザーにサインインや登録をしてもらう: ユーザーは Web サイトやアプリでサインインを求められることを嫌いますが、開発者はユーザーにサインインしてもらうことでアプリの利用度が高まり、アプリを継続して使用してもらえるようになることを知っています。サインインによって、エクスペリエンスをパーソナル化することができ、ユーザーのデータやカスタマイズ内容をアプリに記憶させることができるからです。
  • アプリへのユーザーのコンテンツの持ち込みを容易にすることで、エクスペリエンスを強化する: ユーザーにプロファイル用の写真を提供してもらうというような一見簡単なタスクも、ユーザーの写真データがあちこちのデバイスやクラウドに散らばっているとなると、急に難しくなります。

Windows 8 に付属する Photos や Mail などのアプリではどちらの問題も解決されており、あなたが作成する Metro スタイル アプリでも、同じプラットフォームとテクノロジを利用することができます。私たちがとった解決策は次のようなものです。

  1. クラウドをベースとしたユーザーの ID が OS の基本に組み込まれ、ユーザーがシングル サインオンを許可すれば、アプリや Web サイトから自由にアクセスすることができます。つまり、ユーザーのサインイン状態や ID をアプリに継承することができ、別個に認証プロセスを用意する必要はないということです。これは 2 点目を実現するうえで重要な要素となります。
  2. Live クラウド内のユーザーのコンテンツに対するアプリからのアクセスは、認証と承認には OAuth、SkyDrive や Hotmail にアクセスする際に戻されるデータのペイロードとしては JSON、Windows Live Messenger との相互運用機能には XMPP というように、業界標準のプロトコルを使用して実現されています。これに加えて、Windows 8 Developer Preview 向けに Live SDK を提供することによって WinRT での開発を容易にし、Visual Studio 11 Express への統合もサポートしています。

ユーザーが一度アプリを Windows Live ID に接続すれば、その後は Windows Live ID を使ってサインインしたすべての Windows 8 PC で、シームレスなシングル サインオンがいつでも提供されます。Web サイトも同様で、Windows Live ID を使って PC にサインインするか、Hotmail や SkyDrive など、Windows Live ID をサポートするサイトにサインインすれば、その後はシングル サインオン ベースのエクスペリエンスが得られます。

Windows Live ID によるシングル サインオンを利用し、SkyDrive のコンテンツを Metro スタイル アプリに組み込む方法として最も簡単なのは、Live SDK を活用することです。

これは、アプリケーションでこういったサービスを利用しなければならないという意味ではありません。利用するかどうかは完全に開発者しだいです。Windows 8 向けのアプリでは Live ID を使ってサインオンしなければならないとか、特定のクラウド ベース ストレージを使わなければならないというような要件があるわけではありません。これらはあくまで、アプリ開発者が希望すれば利用できるサービスです。

Live SDK をアプリで使用する

まず、まだインストールが済んでいない場合は、Windows 8 Developer Preview (英語) と Live SDK Developer Preview (英語) を PC にインストールする必要があります。これによって、Microsoft Visual Studio 11 Express for Windows Developer Preview も同時にインストールされます。次に、Windows Push Notifications and Live Connect のアプリ管理サイト (英語) で、Metro スタイル アプリを Live クラウドにアクセスするように構成します。サイトに記載された手順に従って、Live Connect を使用できるようにアプリを登録してください。

Live Connect を使用するようにアプリを構成したら、次は Live SDK への参照を追加する必要があります。Live SDK は、C#、JavaScript、および VB での開発に利用することができます。プロジェクトに追加するには、プロジェクトを右クリックして [Add Reference] (参照の追加)[Extension SDKs] (拡張 SDK) の順にクリックし、次に示すとおり、該当する Live SDK 用エントリを追加します。

JavaScript アプリケーションでは、Default.html に次のスクリプト参照を追加するだけです。

    <script src="ms-wwa:///LiveSDKHTML.5.0/js/wl.js" ></script>

C# では、コードで Live SDK を使用するには次の参照を追加します。

 using Microsoft.Live;

VB では次の Imports ステートメントを追加するだけです。

 Imports Microsoft.Live

これは、Windows 8 向けの Metro スタイル アプリの開発において、開発者が自分の好みの言語を選択できることを示す好例にもなったかと思います。

Metro スタイル アプリで Windows Live ID を使用する

アプリでシングル サインオン (SSO) を活用するには、アプリ内のどこかにサインイン ボタンを配置する必要があります。ユーザーがサインイン ボタンをクリックすると、PC に Windows Live ID を使ってサインインしている場合はそのまま自動的にサインインが完了し、そうでない場合はサインインを要求されます。次にユーザーは、アプリに対してデータ (たとえば SkyDrive 上の写真など) へのアクセスを許可するかどうか確認されます。このワークフローは自動的に処理され、開発者はサインイン ボタンを追加するだけです。ユーザーは自動的にサインオンされるのではなく、アプリケーションでサインオンするかどうか確認を受けるという点にもご注目ください。設計において注意を払った重要なポイントです。

次にサインイン ボタンの HTML コードのサンプルを示します (単純な DIV なので、実際に使用する際は調整が必要です)。

 <div id="signinbutton" style="width: 251px; margin-left: auto; margin-top: 40%; height: 64px; top: 0px;"></div>

ページにサインイン ボタンを追加した後は (このサンプル HTML はページ内にボタン用のスペースを確保するだけのものなので) 実際に機能を割り当てます。またここで、アプリに必要なスコープに合わせて、サインイン ボタンを構成する必要があります。ここでいう "スコープ" とは、アプリケーションがアクセスできる範囲と、ユーザーが提供に合意する必要のある情報の範囲を定義したものです。SkyDrive のデータにアクセスするアプリの場合、次の 2 つのスコープが必要です。

  • wl.signin - アプリへの自動サインインを有効にするスコープです。
  • wl.skydrive - SkyDrive 上のユーザーのアルバムや写真に対する読み取りアクセスを許可するスコープです (注意: SkyDrive にコンテンツをアップロードするアプリの場合は wl.skydrive_update を使用します)。

次に示す例は、JavaScript 用の初期化コードです。ここでは、既にページ上にサインイン ボタンを作成し、"signinbutton" という ID を割り当てているものと想定します。

function init() {
WL.init();

WL.ui({
name: "signin",
element: "signinbutton",
scope: ["wl.signin", "wl.skydrive"],
});
}

こちらはログイン処理のための JavaScript のコード例です。

WL.Event.subscribe("auth.login", onLoginComplete);

function onLoginComplete() {
var session = WL.getSession();
if (!session.error) {
signedInUser();
}
}

ユーザーは、サインイン ボタンをクリックすると、アプリにユーザーのデータへのアクセスを許可するかどうか、確認を求められます。既にお話ししたように、ユーザーが Windows Live ID を使って PC にサインインしている場合はシングル サインオンが有効になっており、再度サインインしてもらう必要はありません。直接この確認画面が表示されます。

アプリから SkyDrive のコンテンツにアクセスする

ユーザーがアプリによるデータへのアクセスを許可すると、OAuth 2.0 のアクセス トークンがアプリに返され、アプリはこれを使用して Live クラウドに対する RESTful API 呼び出しを行うことができます。写真にアクセスするためのコードは、JavaScript では次のようなものになります。

function downloadPicture(folderId) {

var path = folderId + "/files"

// Submit request
WL.api({ path: path, method: "GET" }, onEnumerateFolderComplete)

};

上記の呼び出しをいくつか使うことで、PowerPoint スライド、ビデオ、Excel スプレッドシート、写真など、SkyDrive 上のコンテンツをアプリに埋め込むことができます。後述のサンプル アプリで使用例をご確認いただけます。

このように、Live SDK を使って何行かコードを追加するだけで、シングル サインオンと SkyDrive のユーザー データをアプリに組み込むことができます。クラウドに置かれたユーザーの写真やドキュメントを自由に活用する、よりパーソナルなエクスペリエンスを提供できることでしょう。このブログ記事でご紹介したサンプル アプリの完全なソースコードは、ここからダウンロードすることができます (英語)。

Live SDK によってアプリでシングル サインオンを利用し、SkyDrive の API を活用する方法について、もっと詳しく知りたい場合は、BUILD カンファレンスで行われた Dare Obasanjo のセッション「Power your app with Live services (Live サービスの力をアプリに組み込む)」(英語) と、Steve Gordon のセッション「The complete developer's guide to the SkyDrive API (開発者のための SkyDrive API 完全ガイド)」(英語) を参照してください。また、http://dev.live.com (英語) や Live SDK Developer Preview (英語) のダウンロードからも、詳しい情報が得られます。コーディングにお役立てください。

Mike Torres