패키지 플라이트 제출 관리

Microsoft Store 제출 API는 점진적 패키지 출시를 포함하여 앱의 패키지 플라이트 제출을 관리하는 데 사용할 수 있는 메서드를 제공합니다. API 사용을 위한 필수 조건을 비롯하여 Microsoft Store 제출 API에 대한 자세한 내용은 Microsoft Store 서비스를 사용하여 제출 만들기 및 관리를 참조하세요.

Important

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 기존 패키지 플라이트 제출의 상태 가져오기
게시 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. 아직 수행하지 않은 경우 파트너 센터 계정으로 Azure AD 애플리케이션 연결 및 클라이언트 ID와 키 얻기를 비롯하여 Microsoft Store 서비스를 사용하여 제출 만들기 및 관리에 설명된 필수 조건을 완료합니다. 이 작업은 다음 작업 후에 한 번만 실행하면 됩니다. 클라이언트 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(공유 액세스 서명) RUI, 새 제출에 대한 데이터(모든 목록과 가격 정보 등)가 포함된 플라이트 제출 리소스가 포함되어 있습니다.

    참고 항목

    SAS URI는 계정 키를 요구하지 않고 Azure Storage의 보안 리소스에 대한 액세스를 제공합니다. SAS URI 및 Azure Blob Storage를 통한 SAS URI 사용에 대한 배경 정보는 공유 액세스 서명, 1부: SAS 모델 이해공유 액세스 서명, 2부: Blob Storage를 사용하여 SAS 만들기 및 사용을 참조하세요.

  4. 제출을 위해 새 패키지를 추가하는 경우 패키지를 준비하고 ZIP 보관 파일에 추가합니다.

  5. 새 제출에 필요한 변경 사항으로 플라이트 제출 데이터를 수정하고 다음 메서드를 실행하여 패키지 플라이트 제출을 업데이트합니다.

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

    참고 항목

    제출에 대한 새 패키지를 추가하는 경우 ZIP 보관 파일에서 이러한 파일의 상대 경로 및 이름을 참조하도록 제출 데이터를 업데이트해야 합니다.

  6. 제출에 대한 새 패키지를 추가하는 경우 이전에 호출한 POST 메서드의 응답 본문에 제공된 SAS URI를 사용하여 Azure Blob Storage에 ZIP 보관 파일을 업로드합니다. 다음과 같은 다양한 플랫폼에서 이 작업을 수행하는 데 사용할 수 있는 다양한 Azure 라이브러리가 있습니다.

    다음 C# 코드 예제는 .NET용 Azure Storage 클라이언트 라이브러리의 CloudBlockBlob 클래스를 사용하여 Azure Blob Storage에 ZIP 보관 파일을 업로드하는 방법을 보여 줍니다. 이 예제에서는 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
    

    제출 상태 확인하려면 응답 본문의 상태 값을 검토합니다. 이 값은 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 패키지 플라이트 제출에 대한 점진적 출시 정보 가져오기
게시 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."
}

이 리소스의 값은 다음과 같습니다.

Type 설명
id string 제출의 ID
flightId string 제출이 연결된 패키지 플라이트의 ID입니다.
status string 제출 상태. 이는 다음 값 중 하나일 수 있습니다.
  • None
  • 취소됨
  • PendingCommit
  • CommitStarted
  • CommitFailed
  • PendingPublication
  • 게시 중
  • 게시된 날짜
  • PublishFailed
  • PreProcessing
  • PreProcessingFailed
  • 자격증
  • CertificationFailed
  • Release
  • ReleaseFailed
statusDetails 개체 상태 오류에 대한 정보를 포함하여 제출 상태에 대한 추가 세부 정보가 포함된 상태 세부 정보 리소스를 자세히 설명합니다.
flightPackages 배열 제출의 각 패키지에 대한 세부 정보를 제공하는 플라이트 패키지 리소스를 포함합니다.
packageDeliveryOptions 개체 점진적 패키지 출시 및 제출에 대한 필수 업데이트 설정이 포함된 패키지 전달 옵션 리소스입니다.
fileUploadUrl string 제출에 대한 패키지를 업로드하기 위한 SAS(공유 액세스 서명) URI입니다. 제출에 대한 새 패키지를 추가하는 경우 패키지가 포함된 ZIP 보관 파일을 이 URI에 업로드합니다. 자세한 내용은 패키지 플라이트 제출 만들기를 참조하세요.
targetPublishMode string 제출에 대한 게시 모드입니다. 이는 다음 값 중 하나일 수 있습니다.
  • Immediate
  • 수동
  • SpecificDate
targetPublishDate string targetPublishMode가 SpecificDate로 설정된 경우 ISO 8601 형식의 제출에 대한 게시 날짜입니다.
notesForCertification string 테스트 계정 자격 증명 및 기능에 액세스하고 확인하는 단계와 같은 인증 테스터에 대한 추가 정보를 제공합니다. 자세한 내용은 인증 참고 사항을 참조하세요.

상태 세부 정보 리소스

이 리소스에는 제출 상태에 대한 추가 세부 정보가 포함되어 있습니다. 이 리소스의 값은 다음과 같습니다.

Type 설명
오류 개체 제출에 대한 오류 세부 정보가 포함된 상태 세부 리소스의 배열입니다.
경고 개체 제출에 대한 경고 세부 정보가 포함된 상태 세부 리소스의 배열입니다.
certificationReports 개체 제출에 대한 인증 보고서 데이터에 대한 액세스를 제공하는 인증 보고서 리소스의 배열입니다. 인증에 실패하는 경우 이러한 보고서를 검사하여 자세한 정보를 확인할 수 있습니다.

상태 세부 정보 리소스

이 리소스에는 제출에 대한 관련 오류 또는 경고에 대한 추가 정보가 포함되어 있습니다. 이 리소스의 값은 다음과 같습니다.

Type 설명
코드 string 오류 또는 경고 유형을 설명하는 제출 상태 코드입니다.
details string 문제에 대한 자세한 내용이 포함된 메시지입니다.

인증 보고서 리소스

이 리소스는 제출에 대한 인증 보고서 데이터에 대한 액세스를 제공합니다. 이 리소스의 값은 다음과 같습니다.

Type 설명
날짜 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"
    }
  ],
}

이 리소스의 값은 다음과 같습니다.

참고 항목

update a package flight submission 메서드를 호출할 때는 요청 본문에 이 개체의 fileName, fileStatus, minimumDirectXVersionminimumSystemRam 값만 필요합니다. 다른 값은 파트너 센터에서 채워집니다.

Type 설명
fileName string 패키지 이름입니다.
fileStatus string 패키지의 상태입니다. 이는 다음 값 중 하나일 수 있습니다.
  • None
  • PendingUpload
  • Uploaded
  • PendingDelete
id string 패키지를 고유하게 식별하는 ID입니다. 이 값은 파트너 센터에서 사용합니다.
version string 앱 패키지의 버전입니다. 자세한 내용은 패키지 버전 번호 지정을 참조하세요.
아키텍처 string 앱 패키지의 아키텍처(예: ARM)입니다.
언어 배열 앱에서 지원하는 언어의 언어 코드 배열입니다. 자세한 내용은 지원되는 언어를 참조하세요.
capabilities 배열 패키지에 필요한 기능 배열입니다. 기능에 대한 자세한 내용은 앱 기능 선언을 참조하세요.
minimumDirectXVersion string 앱 패키지에서 지원하는 최소 DirectX 버전입니다. Windows 8.x를 대상으로 하는 앱에 대해서만 설정할 수 있습니다. 다른 버전을 대상으로 하는 앱에 대해서는 무시됩니다. 이는 다음 값 중 하나일 수 있습니다.
  • None
  • DirectX93
  • DirectX100
minimumSystemRam string 앱 패키지에 필요한 최소 RAM입니다. Windows 8.x를 대상으로 하는 앱에 대해서만 설정할 수 있습니다. 다른 버전을 대상으로 하는 앱에 대해서는 무시됩니다. 이는 다음 값 중 하나일 수 있습니다.
  • None
  • Memory2GB

패키지 배달 옵션 리소스

이 리소스에는 점진적 패키지 출시 및 제출에 대한 필수 업데이트 설정이 포함됩니다.

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

이 리소스의 값은 다음과 같습니다.

Type 설명
packageRollout 개체 제출에 대한 점진적 패키지 출시 설정이 포함된 패키지 롤아웃 리소스입니다.
isMandatoryUpdate 부울 값 자체 설치 앱 업데이트에 대해 이 제출의 패키지를 필수로 처리할지 여부를 나타냅니다. 앱 업데이트를 자체 설치하기 위한 필수 패키지에 대한 자세한 내용은 앱에 대한 패키지 업데이트 다운로드 및 설치를 참조하세요.
mandatoryUpdateEffectiveDate 날짜 이 제출의 패키지가 필수가 되는 날짜 및 시간(ISO 8601 형식 및 UTC 표준 시간대)입니다.

패키지 롤아웃 리소스

이 리소스에는 제출에 대한 점진적 패키지 출시 설정이 포함되어 있습니다. 이 리소스의 값은 다음과 같습니다.

Type 설명
isPackageRollout 부울 값 제출에 대해 점진적 패키지 롤아웃을 사용할 수 있는지 여부를 나타냅니다.
packageRolloutPercentage float 점진적 출시에서 패키지를 받을 사용자의 비율입니다.
packageRolloutStatus string 점진적 패키지 롤아웃의 상태를 나타내는 다음 문자열 중 하나입니다.
  • PackageRolloutNotStarted
  • PackageRolloutInProgress
  • PackageRolloutComplete
  • PackageRolloutStopped
fallbackSubmissionId string 점진적 출시 패키지를 받지 못하는 고객이 수신할 제출의 ID입니다.

참고 항목

packageRolloutStatusfallbackSubmissionId 값은 파트너 센터에서 할당하며, 개발자가 설정할 필요가 없습니다. 요청 본문에 이러한 값을 포함하는 경우 값은 무시됩니다.

열거형

이러한 메서드는 다음 열거형을 사용합니다.

제출 상태 코드

다음 코드는 제출 상태를 나타냅니다.

코드 설명
None 코드가 지정되지 않았습니다.
InvalidArchive 패키지가 포함된 ZIP 보관 파일이 잘못되었거나 인식할 수 없는 보관 형식이 있습니다.
MissingFiles ZIP 보관 파일에 제출 데이터에 나열된 모든 파일이 없거나 보관 파일의 잘못된 위치에 있습니다.
PackageValidationFailed 제출에서 하나 이상의 패키지의 유효성을 검사하지 못했습니다.
InvalidParameterValue 요청 본문의 매개 변수 중 하나가 잘못되었습니다.
InvalidOperation 시도한 작업이 잘못되었습니다.
InvalidState 시도한 작업이 패키지 플라이트의 현재 상태에 대해 유효하지 않습니다.
ResourceNotFound 지정된 패키지 플라이트를 찾을 수 없습니다.
ServiceError 내부 서비스 오류로 인해 요청이 성공하지 못했습니다. 요청을 다시 시도합니다.
ListingOptOutWarning 개발자가 이전 제출에서 목록을 제거했거나 패키지에서 지원하는 목록 정보를 포함하지 않았습니다.
ListingOptInWarning 개발자가 목록을 추가했습니다.
UpdateOnlyWarning 개발자가 업데이트 지원만 있는 항목을 삽입하려고 합니다.
기타 제출이 인식할 수 없거나 분류되지 않은 상태입니다.
PackageValidationWarning 패키지 유효성 검사 프로세스로 인해 경고가 발생했습니다.