내보내기(0) 인쇄
모두 확장

방법: Windows Phone용 Silverlight 응용프로그램의 시험판 환경 구현

2012-02-09

이 항목에서는 Windows Phone 응용프로그램에서 시험판 환경을 구현하는 방법에 대해 설명합니다. 시험판 환경의 목표는 응용프로그램을 구입하기 전에 체험해 볼 수 있는 기회를 사용자에게 제공하는 것입니다. 일반적으로 시험판 환경은 기능이나 게임의 레벨을 사용할 수 없도록 하거나 응용프로그램에 시간 제한을 설정하여 응용프로그램을 제한합니다. 이것은 응용프로그램에 대해 구현할 수 있는 제한 종류의 몇 가지 예일 뿐입니다. 응용프로그램에 대한 제한은 전적으로 회원님이 선택합니다. 이 항목에서는 체험 모드에서 기능이 제한되는 단순한 응용프로그램을 만듭니다. 즉, 응용프로그램을 체험 모드로 실행하는 경우 일부 기능을 사용할 수 없습니다. LicenseInformation 클래스를 사용하여 응용프로그램이 어떤 모드에서 실행되고 있는지 확인합니다. XNA Framework 응용프로그램의 시험판 환경 구현에 대한 자세한 내용은 방법: Windows Phone용 XNA Framework 응용프로그램의 시험판 환경 구현을 참조하십시오. 이 응용프로그램에 설명된 기능의 완성된 샘플을 다운로드할 수 있습니다. 자세한 내용은 시험판 응용프로그램 샘플(Silverlight)을 참조하십시오.

이 항목은 다음 섹션으로 이루어져 있습니다.

이 단원에서는 시험판 환경으로 응용프로그램을 보여 주는 UI를 만듭니다. 이것은 Windows Phone용 Silverlight 응용프로그램입니다. 응용프로그램이 시작되면 응용프로그램의 현재 라이선스를 확인합니다. 응용프로그램에 평가판 라이선스가 있는 경우 특정 기능을 사용하지 않도록 설정합니다. 응용프로그램에 정식 라이선스가 있는 경우 모든 기능을 사용하도록 설정합니다. 실제 라이선스 정보는 응용프로그램이 Windows Phone 마켓플레이스 에 게시된 후에만 사용할 수 있습니다. 따라서 시험판 환경을 테스트하려면 라이선스 검색을 시뮬레이션해야 합니다. 응용프로그램이 디버그 모드로 실행 중인 경우 프로그래밍 방식으로 응용프로그램의 IsTrial 속성을 설정하여 이 작업을 수행합니다. 응용프로그램이 게시된 후에는 LicenseInformation.IsTrial 속성을 검사하여 응용프로그램의 IsTrial 속성을 설정합니다.

응용프로그램 사용자 인터페이스를 만들려면

  1. Windows Phone용 Visual Studio 2010 Express 에서 파일 | 새 프로젝트 메뉴 명령을 선택하여 새 프로젝트를 만듭니다.

  2. 새 프로젝트 창이 표시됩니다. Visual C# 템플릿을 확장하고 Windows Phone용 Silverlight 템플릿을 선택합니다.

  3. Windows Phone 응용프로그램 템플릿을 선택합니다. 이름에 선택한 이름을 입력합니다.

  4. 확인을 클릭합니다. 새 프로젝트가 생성되고 MainPage.xaml이 Visual Studio 디자이너 창에서 열립니다.

  5. MainPage.xaml에서 Grid의 XAML 코드("LayoutRoot")를 제거하고 다음 코드로 바꿉니다.

    
            <Grid x:Name="LayoutRoot" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    
            <!--TitlePanel contains the name of the application and page title.-->
            <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
                <TextBlock x:Name="ApplicationTitle" Text="Trial Application Experience" Style="{StaticResource PhoneTextNormalStyle}" Margin="5"/>
                <TextBlock x:Name="PageTitle" Text="main page" Style="{StaticResource PhoneTextTitle1Style}" Margin="5"/>
            </StackPanel>
    
            <!--ContentPanel - place additional content here-->
            <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                <Grid.RowDefinitions>
                    <RowDefinition Height="200"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <StackPanel Grid.Row="0" Orientation="Horizontal"
                            HorizontalAlignment="Center" VerticalAlignment="Center">
                    <TextBlock Text="License:" FontSize="{StaticResource PhoneFontSizeExtraLarge}" />
                    <TextBlock x:Name="tbTrialStatus" FontSize="{StaticResource PhoneFontSizeExtraLarge}" />
                </StackPanel>
                <TextBlock Grid.Row="1" Text="My Application Features" HorizontalAlignment="Center"/>
                <StackPanel Grid.Row="2"  Orientation="Horizontal" HorizontalAlignment="Center">
                    <Button Content=" A" Height="78" Width="100" x:Name="btnFeatureA" Click="btnFeatureA_Click"/>
                    <Button Content=" B" Height="78" Width="100" x:Name="btnFeatureB" Click="btnFeatureB_Click"/>
                    <Button Content=" C" Height="78" Width="100" x:Name="btnFeatureC" Click="btnFeatureC_Click"/>
                </StackPanel>
                <Button Grid.Row="3" x:Name="btnBuyApplication" Content="Buy the Application" Click="btnBuyApplication_Click" Height="78"/>
            </Grid>
        </Grid>
    
    

    앞의 XAML 코드는 다음 스크린샷과 같은 단순 사용자 인터페이스를 만듭니다.

    Silverlight 시험판 응용프로그램의 화면 캡처

    응용프로그램에는 각각 응용프로그램의 한 기능을 나타내는 버튼 세 개가 있습니다. UI에는 현재 라이선스 정보를 보여 주는 상태 텍스트와 응용프로그램 구입 버튼도 포함되어 있습니다. 앞의 코드와 스크린샷은 시험판 환경 빌드의 핵심 개념을 보여 주는 기본 예제로 사용됩니다. 각 버튼의 이벤트 처리기는 다음 단원에서 정의합니다.

이 단원에서는 LicenseInformation 개체를 사용하여 응용프로그램의 현재 라이선스를 확인합니다. 실제 라이선스 정보는 응용프로그램이 Windows Phone 마켓플레이스 에 게시된 후에만 사용할 수 있습니다. 따라서 시험판 환경을 테스트하려면 라이선스 검색을 시뮬레이션해야 합니다. 응용프로그램이 디버그 모드로 실행 중인 경우 프로그래밍 방식으로 응용프로그램의 IsTrial 속성을 설정하여 이 작업을 수행합니다. 응용프로그램이 게시된 후에는 LicenseInformation.IsTrial 속성을 검사하여 응용프로그램의 IsTrial 속성을 설정합니다.

응용프로그램에서 평가판 라이선스를 확인하려면

  1. App.xaml.cs를 열고 페이지의 맨 위에 다음 using 지시문을 추가합니다.

    
    using Microsoft.Phone.Marketplace;
    
    
  2. App 클래스에서 다음 로컬 정적 변수를 선언합니다. LicenseInformation 클래스를 사용하면 응용프로그램이 평가판 라이선스로 실행 중인지 확인할 수 있습니다.

    
         private static LicenseInformation _licenseInfo = new LicenseInformation();
    
    
  3. App.xaml.cs의 동일한 App 클래스에서 다음 읽기 전용 속성과 지역 변수를 추가합니다. 이 속성은 응용프로그램이 실행되는 동안 라이선스 정보를 캐시하는 데 사용됩니다. 현재 라이선스 정보를 확인해야 할 때마다 응용프로그램에서 이 속성을 사용합니다.

    
            private static bool _isTrial = true;
            public bool IsTrial
            {
                get
                {
                    return _isTrial;
                }
            }
    
    
  4. 다음 단원에서는 Application_LaunchingApplication_Activated 이벤트 처리기에서 라이선스 정보를 확인합니다. 이 논리는 두 위치에서 사용되므로 편의상 고유한 메서드에 래핑합니다. App.xaml.cs에 있는 App 클래스에서 다음 메서드를 추가합니다.

    
            /// <summary>
            /// Check the current license information for this application
            /// </summary>
            private void CheckLicense()
            {
                // When debugging, we want to simulate a trial mode experience. The following conditional allows us to set the _isTrial 
                // property to simulate trial mode being on or off. 
    #if DEBUG
                string message = "This sample demonstrates the implementation of a trial mode in an application." +
                                   "Press 'OK' to simulate trial mode. Press 'Cancel' to run the application in normal mode.";
                if (MessageBox.Show(message, "Debug Trial",
                     MessageBoxButton.OKCancel) == MessageBoxResult.OK)
                {
                    _isTrial = true;
                }
                else
                {
                    _isTrial = false;
                }
    #else
                _isTrial = _licenseInfo.IsTrial();
    #endif
            }
    
    

    앞의 메서드는 응용프로그램이 디버그 모드로 실행되는지 여부에 따라 두 개의 코드 경로로 구성됩니다. 디버그 모드에서는 조건부 컴파일 지시문 #if Debug#else 지시문 사이의 코드가 실행됩니다. 체험 모드를 시뮬레이션할 것인지 여부를 묻는 메시지가 사용자에게 표시됩니다. 사용자가 OK를 선택하면 _isTrial 변수가 true로 설정되고, 그렇지 않으면 false로 설정됩니다. 응용프로그램이 릴리스 모드로 빌드된 경우 #else#endif 사이의 코드가 실행되며 _isTrial 변수가 LicenseInformation 개체의 IsTrial 속성을 검사하여 설정됩니다.

  5. 응용프로그램을 시작하거나 계속할 때마다 응용프로그램 라이선스가 확인되어야 합니다. Application_LaunchingApplication_Activated 이벤트 처리기에서 라이선스 정보를 확인하여 이 작업을 수행합니다. App.xaml.csApplication_Launching 이벤트 처리기를 다음 코드로 바꿉니다.

    
            private void Application_Launching(object sender, LaunchingEventArgs e)
            {
                CheckLicense();
            }
    
    
  6. App.xaml.csApplication_Activated 이벤트 처리기를 다음 코드로 바꿉니다.

    
            private void Application_Activated(object sender, ActivatedEventArgs e)
            {
                CheckLicense();
            }
    
    

이 단원에서는 응용프로그램의 현재 라이선스 정보를 사용하여 체험 모드의 응용프로그램을 제한합니다. 응용프로그램 제한 방법은 회원님이 선택합니다. 이 예제에서는 응용프로그램의 한 기능을 나타내는 버튼을 UI에서 사용할 수 없게 하여 체험 모드의 응용프로그램을 제한합니다. Show 메서드를 호출하여 사용자가 Windows Phone 마켓플레이스 를 통해 응용프로그램을 구입할 수 있게 하는 버튼도 UI에 표시됩니다. 응용프로그램이 Windows Phone 마켓플레이스 에 게시되지 않았으므로 Show 호출 시 오류가 발생합니다. 이것은 예상된 동작입니다.

현재 응용프로그램 라이선스 정보를 기준으로 기능을 사용하거나 사용하지 않도록 설정하려면

  • MainPage.xaml.cs 코드 숨김 파일에서 다음 메서드를 추가합니다.

    
           protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
            {
                base.OnNavigatedTo(e);
    
                if ((Application.Current as App).IsTrial)
                {
                    btnBuyApplication.Visibility = System.Windows.Visibility.Visible;
                    btnFeatureC.IsEnabled = false;
                    tbTrialStatus.Text = "Trial";
                }
                else
                {
                    btnBuyApplication.Visibility = System.Windows.Visibility.Collapsed;
                    btnFeatureC.IsEnabled = true;
                    tbTrialStatus.Text = "Full";
                }
            }
    
            private void btnFeatureA_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("Feature A");
            }
    
            private void btnFeatureB_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("Feature B");
            }
    
            private void btnFeatureC_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("Feature C");
            }
    
    

    앞의 코드에서는 OnNavigatedTo 메서드를 재정의하여 사용자가 이 페이지로 이동할 때마다 현재 라이선스 정보를 확인합니다. 이전 단원에서 정의된 App 클래스의 IsTrial 속성을 검사하여 응용프로그램이 체험 모드로 실행되고 있는지, 아니면 정식 라이선스로 실행되고 있는지 확인합니다. 이 속성에서 true가 반환되면 응용프로그램이 체험 모드로 실행되고 있는 것입니다. 체험 모드에서 특정 기능의 비활성화를 시뮬레이션하기 위해 btnFeatureC 버튼이 비활성화됩니다. 또한 사용자가 응용프로그램 구입을 시작할 수 있도록 btnBuyApplication 버튼이 표시됩니다. 최종적으로, tbTrialStatus TextBlock에 라이선스 상태가 설정됩니다.

    IsTrial 속성이 false인 경우 모든 기능을 사용할 수 있습니다. 사용자가 응용프로그램의 정식 라이선스를 가지고 있으므로 btnBuyApplication 버튼은 숨겨집니다. 최종적으로, tbTrialStatus TextBlock에 라이선스 상태가 설정됩니다. 클릭 이벤트 세 개를 사용하여 사용자가 UI에서 기능 버튼 중 하나를 클릭할 때 메시지를 표시합니다.

이 단원에서는 MarketplaceDetailTask를 사용하여 사용자가 응용프로그램을 구입할 수 있도록 Windows Phone 마켓플레이스 의 해당 응용프로그램으로 이동합니다.

사용자에게 응용프로그램을 구입하라는 메시지를 표시하려면

  1. MainPage.xaml.cs를 열고 페이지의 맨 위에 다음 using 지시문을 추가합니다.

    using Microsoft.Phone.Tasks;
    
    
  2. MainPage.xaml.cs 코드 숨김 파일의 MainPage 클래스 맨 위에 다음 변수를 추가합니다.

    
            // Declare the MarketplaceDetailTask object with page scope
            // so we can access it from event handlers.
            MarketplaceDetailTask _marketPlaceDetailTask = new MarketplaceDetailTask();
    
    
  3. MainPage.xaml.cs 코드 숨김 파일에서 다음 메서드를 추가합니다.

    
            private void btnBuyApplication_Click(object sender, RoutedEventArgs e)
            {
                _marketPlaceDetailTask.Show();
            }
    
    

    UI에서 btnBuyApplication 버튼을 클릭할 때 앞의 코드에서는 Windows Phone 마켓플레이스 클라이언트 응용프로그램을 표시하고 지정한 제품에 대한 세부 정보 페이지를 표시합니다. 사용자가 응용프로그램을 구입할 수 있습니다. 이 예제에서는 응용프로그램이 Windows Phone 마켓플레이스 에 게시되지 않았습니다. 따라서 _marketPlaceDetailTask.Show() 호출 시 오류가 표시됩니다. 이 오류에 오류 코드 805a0941이 있으면 호출이 성공한 것이며 응용프로그램을 게시할 때 올바르게 작동합니다. 응용프로그램이 게시되면 Show가 응용프로그램의 고유 ID를 자동으로 검색하고 Windows Phone 마켓플레이스 클라이언트 응용프로그램에서 올바른 세부 정보 페이지를 시작합니다.

응용프로그램을 실행하려면

  1. 단말기 또는 에뮬레이터에서 디버그 | 디버깅 시작 메뉴 명령을 선택하여 응용프로그램을 실행합니다.

    참고참고:

    체험 모드 시뮬레이션을 선택하는 옵션은 응용프로그램이 디버그 모드로 실행되는 경우에만 사용할 수 있습니다. 이는 체험 모드 시뮬레이션이 릴리스 빌드의 응용프로그램에서 실행되어 이 테스트 기능이 활성화된 상태로 Windows Phone 마켓플레이스 에 실수로 게시되는 것을 방지하기 위한 것입니다.

  2. 응용프로그램이 시작되면 메시지 상자가 표시됩니다. OK를 클릭하여 체험 모드를 시뮬레이션합니다.

  3. 응용프로그램의 기본 페이지에서 License 필드가 Trial로 설정되고 Feature C 버튼이 비활성화된 것을 확인합니다.

  4. Buy the Application 버튼을 클릭합니다. Windows Phone 마켓플레이스 클라이언트 응용프로그램을 열려고 시도합니다.

  5. 다음 이미지와 같은 오류 대화 상자가 나타납니다. 이는 응용프로그램이 성공적으로 Windows Phone 마켓플레이스 클라이언트 응용프로그램을 열었음을 나타냅니다. 게시된 응용프로그램에서는 이 오류가 발생하지 않으며 응용프로그램을 구입할 수 있는 Windows Phone 마켓플레이스 의 응용프로그램 세부 정보 페이지로 이동됩니다.

    MarketplaceDetailTask.Show() 오류
  6. 오류 대화 상자에서 Close를 클릭합니다. 응용프로그램이 계속됩니다.

  7. 정식 라이선스를 시뮬레이션하도록 응용프로그램을 실행하려면 이 절차의 2단계에서 표시되는 MessageBox에서 Cancel을 클릭합니다. 또는 디버그 | 디버깅하지 않고 시작 메뉴 명령을 선택하여 응용프로그램을 시작할 수 있습니다. 이 모드에서는 Buy the Application 버튼이 숨겨지며 Feature C 버튼을 사용할 수 있습니다.

표시:
© 2014 Microsoft