스토어에 게시된 앱을 코드로 업데이트

Windows 10 버전 1607(빌드 14393)부터 Windows 10을 사용하면 개발자가 스토어에서 앱 업데이트를 보다 강력하게 보장할 수 있습니다. 이렇게 하려면 몇 가지 간단한 API가 필요하고, 일관되고 예측 가능한 사용자 환경을 만들고, 개발자가 Windows에서 많은 작업을 수행할 수 있도록 하면서 가장 잘하는 작업에 집중할 수 있습니다.

앱 업데이트를 관리할 수 있는 두 가지 기본적인 방법이 있습니다. 두 경우 모두 이러한 메서드의 순 결과는 동일합니다. 업데이트가 적용됩니다. 그러나 한 경우 시스템에서 모든 작업을 수행할 수 있도록 선택할 수 있으며, 다른 경우에는 사용자 환경을 보다 심층적으로 제어할 수 있습니다.

간단한 업데이트

무엇보다도 시스템에 업데이트를 확인하고 다운로드한 다음 사용자에게 설치 권한을 요청하도록 지시하는 매우 간단한 API 호출이 있습니다. 먼저 StoreContext 클래스를 사용하여 StorePackageUpdate 개체를 가져와서 다운로드하여 설치합니다.

using Windows.Services.Store;

private async void GetEasyUpdates()
{
    StoreContext updateManager = StoreContext.GetDefault();
    IReadOnlyList<StorePackageUpdate> updates = await updateManager.GetAppAndOptionalStorePackageUpdatesAsync();

    if (updates.Count > 0)
    {
        IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> downloadOperation = 
            updateManager.RequestDownloadAndInstallStorePackageUpdatesAsync(updates);
        StorePackageUpdateResult result = await downloadOperation.AsTask();
    }
}

이 시점에서 사용자에게 선택할 수 있는 두 가지 옵션, 즉 지금 업데이트를 적용하거나 업데이트를 연기할 수 있습니다. 사용자가 어떤 선택을 하든, 그 선택은 StorePackageUpdateResult 객체를 통해 다시 반환되어 개발자가 앱을 닫거나 나중에 다시 시도하는 등 추가적인 조치를 취할 수 있도록 합니다. 특히, 업데이트가 계속 진행해야 하는 경우에는 앱을 닫는 등의 조치를 취할 수 있습니다.

미세 제어된 업데이트

완전히 사용자 지정된 환경을 원하는 개발자를 위해 업데이트 프로세스를 보다 자세히 제어할 수 있는 추가 API가 제공됩니다. 이 플랫폼을 사용하면 다음을 수행할 수 있습니다.

  • 개별 패키지 다운로드 또는 전체 업데이트에서 진행 상황 이벤트를 가져옵니다.
  • 하나 또는 다른 대신 사용자 및 앱의 편의상 업데이트를 적용합니다.

개발자는 백그라운드에서(앱이 사용 중인 동안) 업데이트를 다운로드한 다음 사용자 설치 업데이트를 요청할 수 있습니다. 업데이트가 거부되면 선택하는 경우 업데이트의 영향을 받는 기능을 사용하지 않도록 설정할 수 있습니다.

업데이트 다운로드

private async void DownloadUpdatesAsync()
{
    StoreContext updateManager = StoreContext.GetDefault();
    IReadOnlyList<StorePackageUpdate> updates = await updateManager.GetAppAndOptionalStorePackageUpdatesAsync();

    if (updates.Count > 0)
    {
        IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> downloadOperation =
            updateManager.RequestDownloadStorePackageUpdatesAsync(updates);

        downloadOperation.Progress = async (asyncInfo, progress) =>
        {
            // Show progress UI
        };

        StorePackageUpdateResult result = await downloadOperation.AsTask();
        if (result.OverallState == StorePackageUpdateState.Completed)
        {
            // Update was downloaded, add logic to request install
        }
    }
}

업데이트 설치

private async void InstallUpdatesAsync()
{
    StoreContext updateManager = StoreContext.GetDefault();
    IReadOnlyList<StorePackageUpdate> updates = await updateManager.GetAppAndOptionalStorePackageUpdatesAsync();    

    // Save app state here

    IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> installOperation =
        updateManager.RequestDownloadAndInstallStorePackageUpdatesAsync(updates);

    StorePackageUpdateResult result = await installOperation.AsTask();

    // Under normal circumstances, app will terminate here

    // Handle error cases here using StorePackageUpdateResult from above
}

필수 업데이트 만들기

경우에 따라 실제로 사용자의 디바이스에 설치해야 하는 업데이트를 사용하는 것이 바람직할 수 있습니다. 따라서 필수입니다(예: 기다릴 수 없는 앱에 대한 중요한 수정 사항). 이러한 경우 업데이트를 필수로 만들기 위해 수행할 수 있는 추가 조치가 있습니다.

  1. 앱 코드에서 필수 업데이트 논리를 구현합니다(필수 업데이트 자체 전에 수행해야 합니다).
  2. 개발자 센터에 제출할 때 이 업데이트를 필수로 설정 확인란이 선택되었는지 확인하세요.

앱 코드 구현

필수 업데이트를 최대한 활용하려면 위의 코드를 약간 수정해야 합니다. 업데이트가 필수인지 확인하려면 StorePackageUpdate 개체 를 사용해야 합니다.

 private async bool CheckForMandatoryUpdates()
{
    StoreContext updateManager = StoreContext.GetDefault();
    IReadOnlyList<StorePackageUpdate> updates = await updateManager.GetAppAndOptionalStorePackageUpdatesAsync();

    if (updates.Count > 0)
    {
        foreach (StorePackageUpdate u in updates)
        {
            if (u.Mandatory)
                return true;
        }
    }
    return false;
}

그런 다음 앱 대화 상자에서 사용자 지정을 만들어 필수 업데이트가 있고 앱의 전체 사용을 계속하려면 설치해야 임을 사용자에게 알려야 합니다. 사용자가 업데이트를 거부하는 경우 앱은 기능을 저하시키거나(예: 온라인 액세스 방지) 완전히 종료할 수 있습니다(예: 온라인 전용 게임).

파트너 센터

StorePackageUpdate가 필수 업데이트에 대해 true로 표시되도록 하려면 패키지 페이지의 파트너 센터에서 업데이트를 필수로 표시해야 합니다.

주의해야 할 몇 가지 사항은 다음과 같습니다.

  • 필수 업데이트가 필수가 아닌 다른 업데이트로 대체된 후 디바이스가 다시 온라인 상태가 되면 필수가 아닌 업데이트가 필수가 되기 전에 누락된 업데이트를 고려할 때 필수가 아닌 업데이트가 디바이스에 계속 필수로 표시됩니다.
  • 개발자가 제어하는 업데이트 및 필수 업데이트는 현재 스토어로 제한됩니다.