次の方法で共有


URI のアクティブ化を処理する

Uri (Uniform Resource Identifier) スキーム名の既定のハンドラーになるようにアプリを登録する方法について説明します。 WinUI アプリは、URI スキーム名の既定のハンドラーとして登録できます。 ユーザーが URI スキーム名の既定のハンドラーとしてアプリを選択した場合、その種類の URI が起動されるたびにアプリがアクティブになります。

URI スキーム名には、その種類の URI スキームのすべての URI 起動を処理する場合にのみ登録することをお勧めします。 URI スキーム名に登録する場合は、その URI スキームに対してアプリがアクティブ化されるときに想定される機能をエンド ユーザーに提供する必要があります。 たとえば、mailto: URI スキーム名に登録するアプリは、ユーザーが新しい電子メールを作成できるように、新しい電子メール メッセージを開く必要があります。 URI の関連付けの詳細については、「 ファイル、フォルダー、ライブラリ」を参照してください。

これらの手順では、カスタム URI スキーム名 alsdk://を登録する方法と、ユーザーが alsdk:// URI を起動した際にアプリをアクティブ化する方法を示します。

重要な API

このトピックでは、次の API を使用します。

Windows では、特定の URI とファイル拡張子は、組み込みのアプリとオペレーティング システムで使用するために予約されています。 予約済みの URI またはファイル拡張子でアプリを登録しようとすると無視されます。 アプリに登録できない URI スキームが予約済みまたは禁止されているために登録できない URI スキームのアルファベット順の一覧については、「予約済み URI スキーム名とファイルの種類 」を参照してください。

手順 1: パッケージ マニフェストで拡張ポイントを指定する

アプリは、パッケージ マニフェストに一覧表示されている URI スキーム名に対してのみアクティブ化イベントを受け取ります。 アプリが alsdk URI スキーム名を処理することを示す方法を次に示します。

  1. ソリューション エクスプローラーので、package.appxmanifest をダブルクリックしてマニフェスト デザイナーを開きます。 [宣言] タブを選択して、[利用可能な宣言] ドロップダウンから [プロトコル] を選択し、[追加] をクリックします。

    プロトコルのマニフェスト デザイナーに入力できる各フィールドの簡単な説明を次に示します (詳細については、 AppX パッケージ マニフェスト を参照してください)。

フィールド 説明
ロゴ コントロール パネル[既定のプログラムの設定] で URI スキーム名を識別するために使用するロゴを指定します。 ロゴが指定されていない場合は、アプリの小さなロゴが使用されます。
表示名 コントロール パネルの [既定のプログラムの設定] で URI スキーム名を識別する表示名を指定します。
名前 Uri スキームの名前を選択します。
メモ 名前は、すべて小文字にする必要があります。
予約済みのファイルの種類と禁止されているファイルの種類 予約済みまたは禁止されているため、Windows アプリに登録できない URI スキームのアルファベット順の一覧については、「予約済み URI スキーム名とファイルの種類 」を参照してください。
実行可能 プロトコルの既定の起動実行可能ファイルを指定します。 指定しない場合は、アプリの実行可能ファイルが使用されます。 指定する場合、文字列の長さは 1 ~ 256 文字にする必要があり、末尾は ".exe" にする必要があり、これらの文字 ( >、 <、:、"、|、?、または *) を含めることはできません。 指定した場合は、 エントリ ポイント も使用されます。 エントリ ポイントが指定されていない場合は、アプリに定義されているエントリ ポイントが使用されます。
エントリーポイント プロトコル拡張機能を処理するタスクを指定します。 これは通常、Windows ランタイム型の名前空間で修飾された完全な名前です。 指定しない場合は、アプリのエントリ ポイントが使用されます。
スタートページ 機能拡張ポイントを処理する Web ページ。
リソース グループ リソース管理のために拡張機能のアクティブ化をグループ化するために使用できるタグ。
Desired View (Windows のみ) [希望するビュー] フィールドを指定して、URI スキーム名を指定して起動する際にアプリのウィンドウが必要とするスペースの量を示します。 Desired View で使用できる値は、既定UseLessUseHalfUseMore、または UseMinimumです。
手記 Windows では、ターゲット アプリの最終的なウィンドウ サイズ (ソース アプリの基本設定、画面上のアプリの数、画面の向きなど) を決定する際に、複数の異なる要因が考慮されます。 Desired View を設定しても、ターゲット アプリの特定のウィンドウ動作は保証されません。
モバイル デバイス ファミリ: モバイル デバイス ファミリでは、Desired View はサポートされていません。
  1. images\Icon.pngとして「」と入力します。

  2. SDK Sample URI Scheme として「」と入力します

  3. alsdkとして「」を入力します。

  4. 変更を package.appxmanifest に保存するには、Ctrl キーを押しながら S キーを押します。

    これにより、このような Extension 要素がパッケージ マニフェストに追加されます。 windows.protocol カテゴリは、アプリがalsdk URI スキーム名を処理することを示します。

    <Applications>
        <Application Id= ... >
            <Extensions>
                <uap:Extension Category="windows.protocol">
                  <uap:Protocol Name="alsdk">
                    <uap:Logo>images\icon.png</uap:Logo>
                    <uap:DisplayName>SDK Sample URI Scheme</uap:DisplayName>
                  </uap:Protocol>
                </uap:Extension>
          </Extensions>
          ...
        </Application>
   </Applications>

手順 2: 適切なアイコンを追加する

URI スキーム名の既定値となるアプリのアイコンは、[既定のプログラム] コントロール パネルなど、システム全体のさまざまな場所に表示されます。 この目的のために、プロジェクトに 44 x 44 アイコンを含めます。 アプリタイルのロゴの外観に合わせて、アイコンを透明にするのではなく、アプリの背景色を使用します。 余白を埋め込まずに、ロゴをエッジまで拡張します。 白い背景でアイコンをテストします。 アイコンの詳細については、「 アプリのアイコンとロゴ 」を参照してください。

手順 3: アクティブ化されたイベントを処理する

WinUI アプリでは、App.OnLaunched (または実際にはいつでも) で (AppInstance.GetActivatedEventArgs) を呼び出してアクティブ化されたイベント引数を取得し、それらを確認してアプリのアクティブ化方法を確認できます。 UWP アプリと WinUI アプリのライフサイクルの違いの詳細については、「 アプリケーション ライフサイクル機能の移行 」を参照してください。

UWP アプリでは、 OnActivated イベント ハンドラーはすべてのアクティブ化イベントを受け取ります。 Kind プロパティは、アクティブ化イベントの種類を示します。 この例は、 プロトコル のアクティブ化イベントを処理するように設定されています。

public partial class App
{
   protected override void OnActivated(IActivatedEventArgs args)
  {
      if (args.Kind == ActivationKind.Protocol)
      {
         ProtocolActivatedEventArgs eventArgs = args as ProtocolActivatedEventArgs;
         // TODO: Handle URI activation
         // The received URI is eventArgs.Uri.AbsoluteUri
      }
   }
}
void App::OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs const& args)
{
    if (args.Kind() == Windows::ApplicationModel::Activation::ActivationKind::Protocol)
    {
        auto protocolActivatedEventArgs{ args.as<Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs>() };
        // TODO: Handle URI activation  
        auto receivedURI{ protocolActivatedEventArgs.Uri().RawUri() };
    }
}
void App::OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs^ args)
{
   if (args->Kind == Windows::ApplicationModel::Activation::ActivationKind::Protocol)
   {
      Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^ eventArgs =
          dynamic_cast<Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^>(args);
      
      // TODO: Handle URI activation  
      // The received URI is eventArgs->Uri->RawUri
   }
}

プロトコル コントラクトを使用して起動する場合は、[戻る] ボタンをクリックすると、アプリを起動した画面にユーザーが戻り、アプリの以前のコンテンツに戻らないようにします。

次のコードは、URI を使用してプログラムによってアプリを起動します。

   // Launch the URI
   var uri = new Uri("alsdk:");
   var success = await Windows.System.Launcher.LaunchUriAsync(uri)

URI を使用してアプリを起動する方法の詳細については、「URI の 既定のアプリを起動する」を参照してください。

アプリでは、新しいページを開くアクティブ化イベントごとに新しい XAML フレーム を作成することをお勧めします。 これにより、新しい XAML フレーム のナビゲーション バックスタックには、中断されたときにアプリが現在のウィンドウに存在する可能性がある以前のコンテンツは含まれません。 起動とファイル コントラクトに 1 つの XAML フレーム を使用することを決定したアプリは、新しいページに移動する前に 、フレーム ナビゲーション ジャーナルのページをクリアする必要があります。

プロトコルのアクティブ化を使用して起動する場合、アプリでは、ユーザーがアプリのトップ ページに戻る UI を含める必要があります。

注釈

任意のアプリや Web サイトが、悪意のあるものを含む URI スキーム名を使用することができます。 そのため、URI で取得したデータは、信頼されていないソースから取得される可能性があります。 URI で受け取るパラメーターに基づいて永続的なアクションを実行することはお勧めしません。 たとえば、URI パラメーターを使用してユーザーのアカウント ページにアプリを起動できますが、ユーザーのアカウントを直接変更するために使用することはお勧めしません。

アプリの新しい URI スキーム名を作成する場合は、 必ず RFC 4395 のガイダンスに従ってください。 これにより、名前が URI スキームの標準を満たしていることを確認できます。

プロトコル コントラクトを使用して UWP アプリを起動する場合は、[戻る] ボタンをクリックすると、ユーザーがアプリを起動した画面に戻り、アプリの以前のコンテンツに戻らないようにします。

アプリでは、新しい URI ターゲットを開くアクティブ化イベントごとに新しい XAML フレーム を作成することをお勧めします。 これにより、新しい XAML フレーム のナビゲーション バックスタックには、中断されたときにアプリが現在のウィンドウに存在する可能性がある以前のコンテンツは含まれません。

アプリで起動とプロトコル コントラクトに 1 つの XAML フレーム を使用する場合は、新しいページに移動する前に 、フレーム ナビゲーション ジャーナルのページをクリアします。 プロトコル コントラクトを使用して起動する場合は、ユーザーがアプリの先頭に戻る UI をアプリに含める方法を検討してください。