共有コントラクト
共有コントラクトの概要
共有コントラクトを利用すると、アプリケーション間でのデータの受け渡しが実現できます。
直接アプリケーションどうしでやり取りするのではなく、OSが間に入りデータのやり取りを行います。
共有コントラクトの実行は通常チャームの共有ボタンから行うのですが、アプリケーションが対応していないと以下のように「このアプリでは共有できません」という寂しい表示になってしまいます。
共有コントラクトの追加
共有コントラクトは、共有対象のデータを渡す側(共有ソース)と受け取る側(共有ターゲット)の2つが存在します。
- 共有ソース:データを渡す側
- 共有ターゲット:データを受け取る側
共有ソース
共有ソースは、DataTransferManagerクラスにDataRequestedイベントハンドラーを設置することで、チャームの共有ボタンが押されたイベントを取得します。
イベントハンドラー内で、DataRequestクラスに共有したいデータを設定します。
以下はURLを共有する例です。
DataRequest request = e.Request; request.Data.Properties.Title = "共有タイトル"; request.Data.Properties.Description = "共有コントラクトを行います"; request.Data.Properties.Thumbnail = file; request.Data.SetUri(new Uri("http://codezine.jp/"));
サンプルコードを実行し、URLをメールアプリに渡した画面が以下です。
共有ターゲット
共有コントラクトのデータを受け取る側、共有ターゲットも検索コントラクト同様に新しい項目の追加から行います。
項目を追加することで検索結果を表示するページが追加され、App.xaml.csにイベントハンドラーが追加されます。マニフェストファイルが追加される点も同様です。
共有コントラクト以外のデータ共有方法
共有コントラクトは、ストアアプリ同士でデータのやり取りを行う、簡潔で安全な方法です。ただし、データを共有する方法は共有コントラクト以外にも存在します。
これらも検討して、より条件にあった方法を選択すべきでしょう。
- クリップボードを利用する
- クラウドを利用する
- ファイルピッカーコントラクトを利用する
- NFCを利用する
クリップボードを利用する
いわゆる「コピペ」です。クリップボードを利用する場合、ストアアプリとデスクトップアプリでデータの共有が可能という点がポイントです。
クラウドを利用する
SkyDriveなどのクラウドやWebサーバーにデータをアップロードし、受信側はそれをダウンロードします。
SkyDriveは、Windowsストアアプリケーションから扱いやすくなっています。ただし、Webに上げたデータは、URLやデータフォーマット(XML、JSON)を知っている必要があり、汎用的とはいい難い方法です。
すでにWebサービスがあり、そのWebサービスと連携したストアアプリを公開したい場合はこの方法を利用します。
ファイルピッカーコントラクトを利用する
ファイルピッカーコントラクトで、ローカルの共有可能な領域にデータを保存、取得します。デスクトップアプリからもデータが利用可能になりますが、保存先、保存ファイル名を制限し辛いため、これもアプリ間のデータ受け渡しとしては不便です。
NFCを利用する
近距離通信を使って、近くにある別の端末にデータを送る場合などに利用します。