クイック スタート: コンテンツの共有 (HTML)

[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]

優れたアプリでは、ユーザーは友人や家族と簡単に情報を共有できます。ユーザーが簡単にコンテンツを共有できるようにすると、アプリへの関心が高まり、アプリをより多くのユーザーに利用してもらえることがよくあります。

ここでは、それらの API の使い方について説明していきます。アプリで共有コンテンツを受け取る方法については、「クイック スタート: 共有コンテンツの受信」をご覧ください。

目標: このクイック スタートを読み終えると、コンテンツを共有する方法を理解できます。

必要条件

  • Visual Studio とそのテンプレートについて理解している必要があります。
  • HTML と JavaScript による開発について理解している必要があります。

手順

データ形式の選択

あらゆる共有操作の中心的な存在となるのは、DataPackage オブジェクトです。このオブジェクトに、ユーザーが共有するデータが格納されます。DataPackage には、次のような種類のコンテンツを格納できます。

  • プレーンテキスト
  • Uniform Resource Identifier (URI)
  • HTML
  • 書式付きテキスト
  • ビットマップ
  • ファイル
  • 開発者が定義したデータ

DataPackage オブジェクトには、これらの 1 つ以上の形式を任意に組み合わせて格納することができます。また、DataPackage にはデリゲートも格納できます。デリゲートとは、受け取る側のアプリでデータを要求するときに呼び出される関数です。デリゲートを使った方が効率よくデータを共有できるため、リソースを大量に消費するデータを共有する場合はデリゲートを使うことをお勧めします。

プロパティの選択

共有用にデータをパッケージ化するときに、共有されるコンテンツの情報を追加で提供するさまざまなプロパティを指定できます。このようなプロパティを利用することで、ターゲット アプリでのユーザー エクスペリエンスを高められます。たとえば、何を共有しているかを伝えるタイトルと説明を提供すると、複数のアプリとコンテンツを共有しているユーザーに役立ちます。画像や Web ページへのリンクを共有する場合にサムネイルを追加すると、ユーザーが視覚的に確認できます。指定できるプロパティについて詳しくは、DataPackage.DataPackagePropertySet に関するドキュメントをご覧ください。

共有ソースのセットアップ

アプリケーションを共有ソース アプリとしてセットアップするには、まず、現在のウィンドウに割り当てられている DataTransferManager クラスのインスタンスを取得する必要があります。

var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();

このクラスは、ユーザーが "共有" を起動するときに発生する DataRequested イベントをサポートします。Windows ストア アプリでは、ユーザーが共有チャームを起動すると自動的にこのイベントが発生します。Windows Phone 用の開発を行っている場合、組み込みの共有チャームがないため、ユーザーがハンドラーをタップしトリガーするためのコントロールを追加する必要があります。

dataTransferManager.addEventListener("datarequested", function (e) {
    // Code to handle event goes here.
});

上の例は、datarequested イベントが発生するたびに呼び出されるイベント ハンドラーを登録します。このハンドラーは、ユーザーが共有ソース アプリからの共有するデータを設定するためにアプリで使う DataRequest オブジェクトを受け取ります。

共有するコンテンツには、タイトルとコンテンツ自体の 2 つをプロパティとして必ず指定する必要があります。 また、より明確にするために、説明プロパティも含めることをお勧めします。

前の例を基にプレーンテキストをターゲット アプリと共有する方法を示すコードは、次のとおりです。

function registerForShare() {
    var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
    dataTransferManager.addEventListener("datarequested", shareTextHandler);
}

function shareTextHandler(e) {
    var request = e.request;
    request.data.properties.title = "Share Text Example";
    request.data.properties.description = "Demonstrates how to share text.";
    request.data.setText("Hello World!");
}

共有とデリゲート

場合によっては、ユーザーが共有を実行したときに、すぐにデータを準備することは望ましくないことがあります。たとえば、アプリが複数のデータ形式をサポートしている場合、すべての形式をすぐに作成するのは効率的ではありません。このような場合は、ターゲット アプリから必要な形式が指定されてから、要求されたデータだけを生成することをお勧めします。そのためには、要求に応じてデリゲートを呼び出して、必要なデータだけを設定するように DataPackage オブジェクトを構成します。

request.data.setDataProvider(Windows.ApplicationModel.DataTransfer.StandardDataFormats.bitmap, onDeferredImageRequested);

この種類の共有について詳しくは、「ファイルを共有する方法」をご覧ください。

プログラムを使った共有ペインの起動

コンテンツの設定が終われば共有の準備は完了です。ユーザーは、コンテンツを受け取るアプリを選んで、共有を開始することができます。ゲームのハイ スコアを共有するようなチャームの使用が適した状況以外では、プログラムで共有チャームを起動することもできます。

  

Windows Phone 8.1 にはCharms barがないため、共有のオプションは開発者がプログラムで組み込む必要があります。これは、いつでもアクセスできるようにアプリ バーに含めるか、または特定のページの特定のコントロールに関連付けることができます。

function showShareUI() {
    Windows.ApplicationModel.DataTransfer.DataTransferManager.showShareUI();
}

エラーやその他の問題の処理

ほとんどの場合、コンテンツの提供は難しいプロセスではありません。ただし、アプリで共有することができない場合もあります。このような状況に対処できるように、Windows 8.1 の DataRequest オブジェクトは FailWithDisplayText メソッドをサポートしています。このメソッドを使うと、ユーザーが特定のビューを共有できなかったり、共有前に追加の手順を行う必要があったりする場合に、ユーザーにテキスト メッセージを表示することができます。たとえば、共有するコンテンツをユーザーが選ぶ必要がある状況で、ユーザーが選んでいない場合などです。

要約と次のステップ

ここでは、共有のしくみについて説明しました。

さらに詳しく学習するか、共有をアプリに追加する方法に関する具体的な例を参照するには、次のトピックをご覧ください。

関連トピック

共有のためのデータ形式の選択

コンテンツの共有のガイドラインとチェック リスト

クイック スタート: 共有コンテンツの受信