アプリの拡張機能のカスタム プロパティを使用する

アプリの拡張機能のプロパティは、アプリの拡張機能の開発者によってアプリ マニフェストに指定される、カスタム メタデータ フィールドです。 アプリの拡張機能のホストは、アプリの拡張機能を調べる際に、このメタデータを読み取ることができます。アプリの拡張機能からコンテンツを読み込む必要はありません。

プロパティは省略可能ですが、非常に便利な機能です。 アプリの拡張機能をホストするプラットフォームを作成する場合、さまざまなメタデータを要求することが考えられます。たとえば、バージョン、機能、サポートされているファイルの種類の一覧や、アプリの拡張機能を読み込む前に把握しておくと便利なその他のデータなどです。 このような情報によって、アプリの拡張機能を読み込む方法が決定される場合もあります。 必要なすべてのフィールドを予測しようとする代わりに、アプリの拡張機能のプロパティでは、必要なものを、アプリに最適な方法で、正確に定義するための自由なキャンバスが提供されます。

アプリの拡張機能のプロパティの利点

アプリの拡張機能のプロパティを利用するべき重要な 2 つの理由を、以下に示します。

  • これは、アプリの拡張機能のプラットフォームに関する基本的なメタデータや重要なメタデータを、簡単かつ安全に格納できる方法です。その情報をファイルに保存する必要はありません。 これは、バージョン管理、アクセス許可、適用などの重要な概念のために使用できます。 たとえば、プロパティで version フィールドが定義され、設定されていることをアプリで要求し、その値に基づいて異なる読み込み動作を実行することができます。

  • その情報はアプリ マニフェストに格納されるため、インデックスを作成し、将来 API を介して使用できるようにすることができます。 つまり、ユーザーへの表示のためにこれを利用したり、より洗練されたアプリの拡張機能で、最初にその拡張機能を展開して読み込む必要なく、特定のプロパティを検索したりすることができます。

プロパティを宣言する方法

プロパティは、パッケージ内の Package.appxmanifest ファイルで宣言されます。 これらは、拡張機能のホストが、実行時にプロパティ セットとして読み取ることができます。 ホストによってプラットフォームが定義されるため、どのプロパティが使用可能で、AppExtension 宣言に含める必要があるかについて、拡張機能の開発者に問い合わせるのはホストの責任です。

注意

Visual Studio のマニフェスト デザイナーでは、プロパティを定義する機能はサポートされていません。 プロパティを定義するには、Package.appxmanifest を直接編集する必要があります。

プロパティを宣言するには、それらを <uap3:AppExtension> 宣言の下の <uap3:Properties/> 要素に追加します。 Microsoft Edge 用の <uap3:AppExtension> 宣言の例を次に示します。ここでは Edge でサポートされているプロパティが使用されています。

<uap3:AppExtension Name="com.microsoft.edge.extension" Id="FirstExtension" PublicFolder="Extension" DisplayName="MyExtension">
  <uap3:Properties>
    <Capabilities>
      <Capability Name="websiteContent" />
      <Capability Name="websiteInfo" />
      <Capability Name="browserWebRequest" />
      <Capability Name="browserStorage" />
    </Capabilities>
  </uap3:Properties>
</uap3:AppExtension>

Edge では、宣言された拡張機能の一覧を含む既知のプロパティ値 Capabilities が定義されています。 ホストは、アプリの拡張機能に必要なあらゆるプロパティをサポートすることができます。 これらはプロパティ セットであるため、入れ子になったプロパティを使用することもできます。 将来拡張機能の形式を変更するときに使用できる、ルート バージョンのプロパティを用意するのも良い方法です。 私たちは意図的に、Version をアプリの拡張機能の属性として設定しませんでした。そのため、私たちのバージョン管理のセマンティクスを使うように人為的に制限されることはありません。 代わりに、多数のカスタム定義属性の 1 つとしてバージョンを設定できる、プロパティが用意されています。そこでは好みの方法と形式を使い、好きなように処理することができます。

プロパティの使用方法

アプリの拡張機能に、バージョンを記述する次のような単純なプロパティがあるとします。

<uap3:Properties>
    <Version>1.0.0.0</Version>
</uap3:Properties>

実行時にこのデータを取得するには、アプリの拡張機能で GetExtensionPropertiesAsync() を呼び出すだけです。

string extensionVersion = "Unknown";
var properties = await ext.GetExtensionPropertiesAsync() as PropertySet;
if (properties != null)
{
    if (properties.ContainsKey("Version"))
    {
        PropertySet versionProperty = properties["Version"] as PropertySet;
        extensionVersion = versionProperty["#text"].ToString();
    }
}