パッケージ フライトの申請の管理

Microsoft Store 申請 API には、段階的なパッケージのロールアウトなど、アプリのパッケージ フライトの申請を管理するために使用できるメソッドが用意されています。 Microsoft Store 申請 API の概要については、「Microsoft Store サービスを使用した申請の作成と管理」をご覧ください。この API を使用するための前提条件などの情報があります。

重要

Microsoft Store 申請 API を使ってパッケージ フライトの提出を作成する場合、申請にさらに変更を加えるには、必ずパートナー センターではなく API のみを使ってください。 最初に API を使って作成した申請を、ダッシュボードを使って変更した場合、API を使ってその申請を変更またはコミットすることができなくなります。 場合によっては、申請がエラー状態のままになり、申請プロセスを進めることができなくなります。 この場合、申請を削除して新しい申請を作成する必要があります。

パッケージ フライトの申請を管理するためのメソッド

パッケージ フライトの申請を取得、作成、更新、コミット、または削除するには、次のメソッドを使用します。 これらのメソッドを使うには、パッケージ フライトをパートナー センターに用意しておく必要があります。 パッケージ フライトは、パートナー センターで作成するか、「パッケージ フライトの管理」で説明されている Microsoft Store 申請 API のメソッドを使って作成できます。

認証方法 URI 説明
GET https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId} 既存のパッケージ フライトの申請を更新します
GET https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId}/status 既存のパッケージ フライトの申請の状態を取得します
POST https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions 新しいパッケージ フライトの申請を作成します
PUT https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId} 既存のパッケージ フライトの申請を更新します
POST https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId}/commit 新しいパッケージ フライトの申請または更新されたパッケージ フライトの申請をコミットします
DELETE https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId} パッケージ フライトの申請の削除

パッケージ フライトの申請の作成

パッケージ フライトの申請を作成するには、次のプロセスに従います。

  1. Microsoft Store サービスを使用した申請の作成と管理」に記載されている前提条件が満たされていない場合は、前提条件を整えてください。これには、Azure AD アプリケーションのパートナー センター アカウントへの関連付けや、クライアント ID およびキーの取得が含まれます。 この作業は 1 度行うだけでよく、クライアント ID とキーを入手したら、新しい Azure AD アクセス トークンの作成が必要になったときに、いつでもそれらを再利用できます。

  2. Azure AD のアクセス トークンを取得します。 このアクセス トークンを Microsoft Store 申請 API のメソッドに渡す必要があります。 アクセス トークンを取得した後、アクセス トークンを使用できるのは、その有効期限が切れるまでの 60 分間です。 トークンの有効期限が切れたら新しいトークンを取得できます。

  3. Microsoft Store 申請 API の次のメソッドを実行して、パッケージ フライトの申請を作成します。 このメソッドによって、新しい申請が作成され、審査中になります。これは、前回発行した申請のコピーです。

    POST https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions
    

    応答本文には、新しい申請の ID、申請用のパッケージを Azure Blob Storage にアップロードするための共有アクセス署名 (SAS) URI、および新しい申請のデータ (すべての登録情報と価格情報が含まれます) を含むフライトの申請リソースが含まれます。

    注意

    SAS URI では、アカウント キーを必要とせずに、Azure Storage 内のセキュリティで保護されたリソースにアクセスできます。 SAS URI の背景情報と Azure Blob Storage での SAS URI の使用については、「Shared Access Signatures、第 1 部: SAS モデルについて」と「Shared Access Signature、第 2 部: BLOB ストレージでの SAS の作成と使用」を参照してください。

  4. 申請用に新しいパッケージを追加する場合は、パッケージを準備して、ZIP アーカイブに追加します。

  5. 新しい申請用に必要な変更を行ってフライトの申請のデータを更新し、次のメソッドを実行してパッケージ フライトの申請を更新します。

    PUT https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId}
    

    注意

    申請用に新しいパッケージを追加する場合、ZIP アーカイブ内のアイコンのファイルの名前と相対パスを参照するように、申請データを更新してください。

  6. 申請用に新しいパッケージを追加する場合は、上記で呼び出した POST メソッドの応答本文に含まれていた SAS URI を使って、ZIP アーカイブを Azure Blob Storage にアップロードします。 さまざまなプラットフォームでこれを行うために使用できる、次のようなさまざまな Azure ライブラリがあります。

    次の C# コード例は、.NET 用 Azure Storage クライアント ライブラリの CloudBlockBlob クラスを使って ZIP アーカイブを Azure Blob Storage にアップロードする方法を示しています。 この例では、ZIP アーカイブが既にストリーム オブジェクトに書き込まれていることを前提としています。

    string sasUrl = "https://productingestionbin1.blob.core.windows.net/ingestion/26920f66-b592-4439-9a9d-fb0f014902ec?sv=2014-02-14&sr=b&sig=usAN0kNFNnYE2tGQBI%2BARQWejX1Guiz7hdFtRhyK%2Bog%3D&se=2016-06-17T20:45:51Z&sp=rwl";
    Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob blockBob =
        new Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob(new System.Uri(sasUrl));
    await blockBob.UploadFromStreamAsync(stream);
    
  7. 次のメソッドを実行して、パッケージ フライトの申請をコミットします。 これで、申請が完了し、更新がアカウントに適用されていることがパートナー センターに通知されます。

    POST https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId}/commit
    
  8. 次のメソッドを実行してパッケージ フライトの申請の状態を取得して、コミット状態を確認します。

    GET https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId}/status
    

    申請の状態を確認するには、応答本文の status の値を確認します。 この値が CommitStarted から PreProcessing (要求が成功した場合) または CommitFailed (要求でエラーが発生した場合) に変わっています。 エラーがある場合は、statusDetails フィールドにエラーについての詳細情報が含まれています。

  9. コミットが正常に処理されると、インジェストのために申請がストアに送信されます。 上記のメソッドを使うか、パートナー センターのダッシュボードから、申請の進行状況を引き続き監視できます。

コード例

次の記事では、さまざまなプログラミング言語でパッケージ フライトの申請を作成する方法を説明する詳しいコード例を紹介します。

StoreBroker PowerShell モジュール

Microsoft Store 申請 API を直接呼び出す代わりに、API の上にコマンド ライン インターフェイスを実装するオープンソースの PowerShell モジュールも用意されています。 このモジュールは、StoreBroker と呼ばれています。 このモジュールを使うと、Microsoft Store 申請 API を直接呼び出さずに、コマンド ラインからアプリ、フライト、アドオンの申請を管理できます。また、ソースを参照して、この API を呼び出す方法の例を確認することもできます。 StoreBroker モジュールは、多くのファースト パーティ アプリケーションをストアに申請する主要な方法として Microsoft 内で積極的に使っています。

詳しくは、GitHub の StoreBroker に関するページをご覧ください。

パッケージ フライトの申請の段階的なパッケージのロールアウトを管理する

パッケージ フライトの申請で更新されたパッケージを、Windows 10およびWindows 11でアプリの顧客の割合に徐々にロールアウトできます。 これにより、更新に確信が持てるよう、特定のパッケージのフィードバックと分析データを監視してから、より広くロールアウトできます。 新しい申請を作成することなく、公開された申請のロールアウトの割合を変更する (または更新を停止する) ことができます。 パートナー センターで段階的なパッケージのロールアウトの有効化と管理を行う方法などについて詳しくは、この記事をご覧ください。

パッケージ フライトの申請の段階的なパッケージのロールアウトをプログラムによって有効化するには、Microsoft Store 申請 API のメソッドを使用して、次の手順に従います。

  1. パッケージ フライトの申請の作成、またはパッケージ フライトの申請の取得を行います。
  2. 応答データで、packageRollout リソースを探し、[isPackageRollout] フィールドを [true] に設定し、[packageRolloutPercentage] フィールドに、アプリのユーザーが更新されたパッケージを取得する割合を設定します。
  3. 更新されたパッケージ フライトの申請のデータをパッケージ フライトの申請を更新するメソッドに渡します。

パッケージ フライトの申請の段階的なパッケージのロールアウトが有効化された後、段階的なロールアウトをプログラムで取得、更新、停止、または完了するには、次のメソッドを使用できます。

認証方法 URI 説明
GET https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId}/packagerollout パッケージ フライトの申請の段階的なロールアウトの情報を取得します
POST https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId}/updatepackagerolloutpercentage パッケージ フライトの申請の段階的なロールアウトの割合を更新します
POST https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId}/haltpackagerollout パッケージ フライトの申請の段階的なロールアウトを停止します
POST https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId}/finalizepackagerollout パッケージ フライトの申請の段階的なロールアウトの情報を完了します

データ リソース

パッケージ フライトの申請を管理するための Microsoft Store 申請 API のメソッドでは、次の JSON データ リソースが使われます。

フライトの申請のリソース

このリソースは、パッケージ フライトの申請を記述しています。

{
  "id": "1152921504621243649",
  "flightId": "cd2e368a-0da5-4026-9f34-0e7934bc6f23",
  "status": "PendingCommit",
  "statusDetails": {
    "errors": [],
    "warnings": [],
    "certificationReports": []
  },
  "flightPackages": [
    {
      "fileName": "newPackage.appx",
      "fileStatus": "PendingUpload",
      "id": "",
      "version": "1.0.0.0",
      "languages": ["en-us"],
      "capabilities": [],
      "minimumDirectXVersion": "None",
      "minimumSystemRam": "None"
    }
  ],
  "packageDeliveryOptions": {
    "packageRollout": {
        "isPackageRollout": false,
        "packageRolloutPercentage": 0.0,
        "packageRolloutStatus": "PackageRolloutNotStarted",
        "fallbackSubmissionId": "0"
    },
    "isMandatoryUpdate": false,
    "mandatoryUpdateEffectiveDate": "1601-01-01T00:00:00.0000000Z"
  },
  "fileUploadUrl": "https://productingestionbin1.blob.core.windows.net/ingestion/8b389577-5d5e-4cbe-a744-1ff2e97a9eb8?sv=2014-02-14&sr=b&sig=wgMCQPjPDkuuxNLkeG35rfHaMToebCxBNMPw7WABdXU%3D&se=2016-06-17T21:29:44Z&sp=rwl",
  "targetPublishMode": "Immediate",
  "targetPublishDate": "",
  "notesForCertification": "No special steps are required for certification of this app."
}

このリソースには、次の値があります。

Type 説明
id string 申請の ID です。
flightId string 申請が関連付けられているパッケージ フライトの ID です。
status string 申請の状態。 次のいずれかの値を指定できます。
  • なし
  • Canceled
  • PendingCommit
  • CommitStarted
  • CommitFailed
  • PendingPublication
  • 発行
  • 公開済み
  • PublishFailed
  • PreProcessing
  • PreProcessingFailed
  • 認定資格
  • CertificationFailed
  • リリース
  • ReleaseFailed
statusDetails object エラーに関する情報など、申請のステータスに関する追加情報が保持されるステータスの詳細に関するリソースです。
flightPackages array 申請の各パッケージに関する詳細を提供するフライト パッケージ リソースが含まれています。
packageDeliveryOptions object 申請の段階的なパッケージのロールアウトと必須の更新の設定が含まれたパッケージ配布オプション リソースです。
fileUploadUrl string 申請のパッケージのアップロードに使用する共有アクセス署名 (SAS) URI です。 申請用に新しいパッケージを追加する場合は、パッケージを含む ZIP アーカイブをこの URI にアップロードします。 詳しくは、「パッケージ フライトの申請の作成」をご覧ください。
targetPublishMode string 申請の公開モードです。 次のいずれかの値を指定できます。
  • 即時
  • 手動
  • SpecificDate
targetPublishDate string targetPublishMode が SpecificDate に設定されている場合、ISO 8601 形式での申請の公開日です。
notesForCertification string テスト アカウントの資格情報や、機能のアクセスおよび検証手順など、審査担当者に対して追加情報を提供します。 詳しくは、「認定の注意書き」をご覧ください。

ステータスの詳細に関するリソース

このリソースには、申請の状態についての追加情報が保持されます。 このリソースには、次の値があります。

Type 説明
エラー object 申請のエラーの詳細が保持されるステータスの詳細リソースの配列です。
warnings object 申請の警告の詳細が保持されるステータスの詳細リソースの配列です。
certificationReports object 申請の認定レポート データへのアクセスを提供する認定レポート リソースです。 認定されなかった場合に、これらのレポートから詳しい情報を知ることができます。

ステータスの詳細に関するリソース

このリソースには、申請に関連するエラーや警告についての追加情報が保持されます。 このリソースには、次の値があります。

Type 説明
code string エラーや警告の種類を説明する申請ステータス コードです。
details string 問題についての詳細が含まれるメッセージです。

認定レポート リソース

このリソースは、申請の認定レポート データへのアクセスを提供します。 このリソースには、次の値があります。

Type 説明
date string ISO 8601 形式で表された、レポートが生成された日付と時刻です。
reportUrl string レポートにアクセスできる URL です。

フライト パッケージ リソース

このリソースは、申請に含まれるパッケージについての詳細情報を提供します。

{
  "flightPackages": [
    {
      "fileName": "newPackage.appx",
      "fileStatus": "PendingUpload",
      "id": "",
      "version": "1.0.0.0",
      "languages": ["en-us"],
      "capabilities": [],
      "minimumDirectXVersion": "None",
      "minimumSystemRam": "None"
    }
  ],
}

このリソースには、次の値があります。

注意

パッケージ フライトの申請の更新のメソッドを呼び出す場合、要求本文に必要なのは、このオブジェクトの fileNamefileStatusminimumDirectXVersionminimumSystemRam の値のみです。 他の値はパートナー センターによって設定されます。

Type 説明
fileName string パッケージの名前です。
fileStatus string パッケージの状態です。 次のいずれかの値を指定できます。
  • なし
  • PendingUpload
  • アップロード完了
  • PendingDelete
id string パッケージを一意に識別する ID です。 この値はパートナー センターで使われます。
version string アプリ パッケージのバージョンです。 詳しくは、「パッケージ バージョンの番号付け」をご覧ください。
アーキテクチャ string アプリ パッケージのアーキテクチャ (ARM など) です。
languages array アプリがサポートする言語の言語コードの配列です。 詳しくは、「サポートされる言語パックと既定の」をご覧ください。
capabilities array パッケージに必要な機能の配列です。 機能について詳しくは、「アプリ機能の宣言」をご覧ください。
minimumDirectXVersion string アプリ パッケージによってサポートされる DirectX の最小バージョンです。 これは Windows 8.x をターゲットにするアプリにしか設定できません。その他バージョンをターゲットにするアプリでは無視されます。 次のいずれかの値を指定できます。
  • なし
  • DirectX93
  • DirectX100
minimumSystemRam string アプリ パッケージに必要な RAM の最小サイズです。 これは Windows 8.x をターゲットにするアプリにしか設定できません。その他バージョンをターゲットにするアプリでは無視されます。 次のいずれかの値を指定できます。
  • なし
  • Memory2GB

パッケージの配信オプション リソース

このリソースには、申請の段階的なパッケージのロールアウトと必須の更新の設定が含まれています。

{
  "packageDeliveryOptions": {
    "packageRollout": {
        "isPackageRollout": false,
        "packageRolloutPercentage": 0.0,
        "packageRolloutStatus": "PackageRolloutNotStarted",
        "fallbackSubmissionId": "0"
    },
    "isMandatoryUpdate": false,
    "mandatoryUpdateEffectiveDate": "1601-01-01T00:00:00.0000000Z"
  },
}

このリソースには、次の値があります。

Type 説明
packageRollout object 申請の段階的なパッケージのロールアウトの設定が含まれたパッケージのロールアウトのリソースです。
isMandatoryUpdate boolean この申請のパッケージを自己インストールのアプリの更新のために必須として扱うかどうかを指定します。 自己インストールのアプリの更新のために必須なパッケージについて詳しくは、「アプリのパッケージの更新をダウンロードしてインストールする」をご覧ください。
mandatoryUpdateEffectiveDate 日付 この申請のパッケージが必須となる日時 (ISO 8601 形式、UTC タイムゾーン)。

パッケージのロールアウトのリソース

このリソースには、申請の段階的なパッケージのロールアウトの設定が含まれています。 このリソースには、次の値があります。

Type 説明
isPackageRollout boolean 申請の段階的なパッケージのロールアウトが有効化されているかどうかを示します。
packageRolloutPercentage float 段階的なロールアウトでパッケージを受信するユーザーの割合。
packageRolloutStatus string 段階的なパッケージのロールアウトの状態を示す、次の文字列のいずれかです。
  • PackageRolloutNotStarted
  • PackageRolloutInProgress
  • PackageRolloutComplete
  • PackageRolloutStopped
fallbackSubmissionId string 段階的なロールアウトのパッケージを入手しないユーザーが受信する申請のID。

注意

packageRolloutStatusfallbackSubmissionId の値はパートナー センターで割り当てられます。これらの値は、開発者が設定する値ではありません。 これらの値を要求本文に含めると、これらの値は無視されます。

列挙型

これらのメソッドでは、次の列挙型が使用されます。

申請の状態コード

次のコードは、申請の状態を表します。

コード 説明
なし コードが指定されていません。
InvalidArchive パッケージが含まれる ZIP アーカイブは無効であるか、認識できないアーカイブ形式です。
MissingFiles ZIP アーカイブに、申請データで指定されているすべてのファイルが含まれていないか、ファイルのアーカイブ内の場所が正しくありません。
PackageValidationFailed 申請の 1 つ以上のパッケージを検証できませんでした。
InvalidParameterValue 要求本文に含まれるパラメーターの 1 つが無効です。
InvalidOperation 実行された操作は無効です。
InvalidState 実行された操作は、パッケージ フライトの現在の状態では無効です。
ResourceNotFound 指定されたパッケージ フライトは見つかりませんでした。
ServiceError 内部サービス エラーのため、要求を処理できませんでした。 もう一度要求を行ってください。
ListingOptOutWarning 開発者が以前の申請の登録情報を削除しているか、パッケージによってサポートされる登録情報を含めていませんでした。
ListingOptInWarning 開発者が登録情報を追加しました。
UpdateOnlyWarning 開発者が、更新サポートしかないものを挿入しようとしています。
その他 申請が非認識または未分類の状態です。
PackageValidationWarning パッケージ検証プロセスの結果、警告が生成されました。