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

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

重要

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

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

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

Method 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 既存のパッケージ フライト申請の状態を取得する
投稿 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} 既存のパッケージ フライトの申請を更新する
投稿 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、および新しい申請のデータ (すべての登録情報と価格情報が含まれます) を含むフライトの申請リソースが含まれます。

    Note

    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}
    

    Note

    申請に新しいパッケージを追加する場合は、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. 更新されたパッケージ フライト申請データを update a package flight submission メソッドに渡します。

パッケージ フライトの申請に対して段階的なパッケージ ロールアウトが有効になった後、次の方法を使用して、段階的なロールアウトをプログラムで取得、更新、停止、または完了できます。

Method URI 説明
GET https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId}/packagerollout パッケージ フライトの申請に関する段階的なロールアウト情報を取得する
投稿 https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId}/updatepackagerolloutpercentage パッケージ フライトの申請の段階的なロールアウト率を更新する
投稿 https://manage.devcenter.microsoft.com/v1.0/my/applications/{applicationId}/flights/{flightId}/submissions/{submissionId}/haltpackagerollout パッケージ フライトの申請の段階的なロールアウトを停止する
投稿 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."
}

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

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

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

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

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

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

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

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

認定レポート リソース

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

種類 説明
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"
    }
  ],
}

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

Note

update a package flight submission メソッドを呼び出す場合、要求本文には、fileNamefileStatusminimumDirectXVersion、および minimumSystemRam 値のみが必要です。 他の値はパートナー センターによって設定されます。

種類 説明
fileName string パッケージの名前です。
fileStatus string パッケージの状態。 次のいずれかの値を指定できます。
  • なし
  • PendingUpload
  • アップロード完了
  • PendingDelete
ID string パッケージを一意に識別する ID。 この値はパートナー センターで使われます。
version string アプリ パッケージのバージョン。 詳細については、「 Package のバージョン番号付けを参照してください。
アーキテクチャ string アプリ パッケージのアーキテクチャ (ARM など)。
言語 配列 アプリがサポートする言語の言語コードの配列。 詳細については、「 サポートされている言語」を参照してください。
capabilities 配列 パッケージに必要な機能の配列。 機能の詳細については、「 App capability 宣言」を参照してください。
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"
  },
}

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

種類 説明
packageRollout オブジェクト 申請の段階的なパッケージ ロールアウト設定を含む パッケージ ロールアウト リソース
isMandatoryUpdate boolean この申請のパッケージを、アプリの更新プログラムの自己インストールに必須として扱うかどうかを示します。 アプリの更新プログラムを自己インストールするための必須パッケージの詳細については、「 アプリのパッケージ更新プログラムをダウンロードしてインストールするを参照してください。
mandatoryUpdateEffectiveDate 日付 この申請のパッケージが必須になる日時 (ISO 8601 形式と UTC タイム ゾーン)。

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

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

種類 説明
isPackageRollout boolean 申請に対して段階的なパッケージ ロールアウトが有効になっているかどうかを示します。
packageRolloutPercentage float 段階的なロールアウトでパッケージを受け取るユーザーの割合。
packageRolloutStatus string 段階的なパッケージロールアウトの状態を示す次のいずれかの文字列。
  • PackageRolloutNotStarted
  • PackageRolloutInProgress
  • PackageRolloutComplete
  • PackageRolloutStopped
fallbackSubmissionId string 段階的なロールアウト パッケージを取得しないお客様が受け取る申請の ID。

Note

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

列挙型

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

申請の状態コード

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

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