方法: Windows Phone 用 Silverlight アプリケーションに試用エクスペリエンスを実装する

2012/02/09

このトピックでは、Windows Phone アプリケーションに試用エクスペリエンスを実装する方法について説明します。試用エクスペリエンスは、購入の前にアプリケーションを試用する機会をユーザーに提供することを目的としています。試用版では、特定の機能の無効化、ゲームのレベルの制限、アプリケーションの使用期限など、何らかの制限を加えるのが普通です。これらはほんの一例であり、自分のアプリケーションにどのような制限を加えるかは開発者の自由です。このトピックでは、試用モードで機能が制限される単純なアプリケーションを作成します。つまり、アプリケーションが試用モードで実行される際はいくつかの機能が無効になります。アプリケーションが実行されているモードを判断するには、LicenseInformation クラスを使用します。XNA Framework アプリケーションの試用エクスペリエンスの実装については、「方法: Windows Phone 用 XNA Framework アプリケーションに試用エクスペリエンスを実装する」を参照してください。このアプリケーションで説明されている機能の完成したサンプルをダウンロードできます。詳細については、「試用版アプリケーションのサンプル (Silverlight)」を参照してください。

このトピックは、次のセクションで構成されています。

このセクションでは、試用エクスペリエンスでアプリケーションをデモンストレーションするために UI を作成します。これは Silverlight for Windows Phone アプリケーションです。アプリケーションが起動すると、アプリケーションの現在のライセンスがチェックされます。アプリケーションが試用ライセンスの場合は、1 つの機能が無効になります。アプリケーションがフル ライセンスの場合は、すべての機能が有効になります。アプリケーションの実際のライセンス情報は、Windows Phone Marketplace に公開された後にのみ使用可能になります。したがって、試用エクスペリエンスをテストするには、ライセンス検出をシミュレートする必要があります。この操作は、アプリケーションをデバッグ モードで実行しているときに、アプリケーションの IsTrial プロパティをプログラムにより設定することによって実行します。プリケーションの公開後、アプリケーションの IsTrial プロパティは LicenseInformation.IsTrial プロパティを調べることによって設定されます。

アプリケーションのユーザー インターフェイスを作成するには

  1. Visual Studio 2010 Express for Windows Phone で、[ファイル] メニューの [新しいプロジェクト] をクリックして新しいプロジェクトを作成します。

  2. [新しいプロジェクト] ウィンドウが表示されます。Visual C# のテンプレートを展開してから、Silverlight for Windows Phone のテンプレートを選択します。

  3. Windows Phone アプリケーション テンプレートを選択します。[名前] に選択した名前を入力します。

  4. [OK] をクリックします。新しいプロジェクトが作成され、Visual Studio のデザイナー ウィンドウに MainPage.xaml が表示されます。

  5. MainPage.xaml の中で、"LayoutRoot" という名前の Grid の XAML コードを削除し、次に示すコードで置き換えます。

    
            <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>
    
    

    上記の XAM コードでは、次のスクリーンショットのような簡単なユーザー インターフェイスが作成されます。

    Silverlight 試用版アプリのスクリーンショット

    アプリケーションには 3 つのボタンが含まれており、それぞれがアプリケーションの機能を表します。また、UI には、現在のライセンス情報を示すステータス テキスト、およびアプリケーションを購入するためのボタンも含まれています。上記のコードとスクリーンショットは基本的な例であり、試用エクスペリエンスをビルドする際に中核となる概念を示しています。各ボタンのイベント ハンドラーは、次のセクションで定義します。

このセクションでは、LicenseInformation オブジェクトを使用してアプリケーションの現在のライセンスを判断します。アプリケーションの実際のライセンス情報は、Windows Phone Marketplace に公開された後にのみ使用可能になります。したがって、試用エクスペリエンスをテストするには、ライセンス検出をシミュレートする必要があります。この操作は、アプリケーションをデバッグ モードで実行しているときに、アプリケーションの IsTrial プロパティをプログラムにより設定することによって実行します。プリケーションの公開後、アプリケーションの IsTrial プロパティは LicenseInformation.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_Launching イベント ハンドラーと Application_Activated イベント ハンドラーでライセンス情報をチェックします。このロジックは 2 つの場所で使用されるため、便宜上それ自体のメソッドにラップします。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
            }
    
    

    上記のメソッドは、アプリケーションがデバッグ モードで実行されているかどうかに応じて、2 つのコード パスで構成されます。デバッグ モードでは、条件付きコンパイル ディレクティブ #if Debug#else ディレクティブの間のコードが実行されます。ユーザーは、試用モードをシミュレートするかどうかをたずねられます。ユーザーが [OK] を選択した場合、_isTrial 変数は true に設定されます。それ以外の場合は false に設定されます。アプリケーションがリリース モードでビルドされた場合は、 #else#endif の間のコードが実行され、LicenseInformation オブジェクトで IsTrial プロパティを調べることによって _isTrial 変数が設定されます。

  5. アプリケーションが起動または再開するたびに、アプリケーションのライセンスをチェックする必要があります。この処理は、Application_Launching イベント ハンドラーと Application_Activated イベント ハンドラーでライセンス情報をチェックすることによって行われます。App.xaml.cs 内の Application_Launching イベント ハンドラーを次のコードに置き換えます。

    
            private void Application_Launching(object sender, LaunchingEventArgs e)
            {
                CheckLicense();
            }
    
    
  6. App.xaml.cs 内の Application_Activated イベント ハンドラーを次のコードに置き換えます。

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

このセクションでは、アプリケーションの現在のライセンスに関する情報を使用して、試用モードのアプリケーションを制限します。アプリケーションをどのように制限するかは選択可能です。この例では、アプリケーションの機能を表す UI のボタンの 1 つを無効にすることによって、試用モードのアプリケーションを制限します。また、Show メソッドを呼び出すことによって、ユーザーが Windows Phone Marketplace を通じてアプリケーションを購入するためのボタンを UI 上に表示します。このアプリケーションは Windows Phone Marketplace に公開されていないため、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 で設定されます。3 つのクリック イベントは、ユーザーが UI の機能ボタンの 1 つをクリックした際にメッセージを表示するために使用されます。

このセクションでは、ユーザーがアプリケーションを購入できるように、MarketplaceDetailTask を使用してユーザーを Windows Phone Marketplace 内のアプリケーションに移動させます。

ユーザーにアプリケーションの購入を案内するには

  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 Marketplace クライアント アプリケーションを表示し、特定の製品の詳細ページを表示します。これにより、ユーザーはアプリケーションを購入できます。この例では、アプリケーションは Windows Phone Marketplace に公開されていません。このため、_marketPlaceDetailTask.Show() を呼び出すとエラーが表示されます。このエラーのエラー コードが 805a0941 である場合、呼び出しは正常に行われており、アプリケーションが公開されると正しく動作します。アプリケーションが公開されると、Show はアプリケーションの一意の ID を自動的に検出し、Windows Phone Marketplace クライアント アプリケーションの正しい詳細ページを起動します。

アプリケーションを実行するには

  1. デバイスまたはエミュレーターで、[デバッグ] メニューの [デバッグ開始] をクリックしてアプリケーションを実行します。

    注注:

    試用モード シミュレーションを選択するオプションは、アプリケーションがデバッグ モードで実行されている際にのみ使用できます。これは、試用モード シミュレーションがアプリケーションのリリース ビルドで実行され、このテスト機能が有効のまま誤って Windows Phone Marketplace に公開されることを防ぐためです。

  2. アプリケーションが起動すると、メッセージ ボックスが表示されます。試用モードをシミュレートするには、[OK] をクリックします。

  3. アプリケーションのメイン ページで、[License] フィールドが [Trial] に設定され、[Feature C] ボタンが無効になっていることを確認します。

  4. [Buy the Application] ボタンをクリックします。Windows Phone Marketplace クライアント アプリケーションを開くことが試行されます。

  5. 次の画像のようなエラー ダイアログが表示されます。これは、アプリケーションによって Windows Phone Marketplace クライアント アプリケーションが正常に開かれたことを示します。公開されたアプリケーションではこのエラーは発生せず、Windows Phone Marketplace 上のアプリケーションの詳細ページに移動し、ここでアプリケーションを購入できます。

    MarketplaceDetailTask.Show() エラー
  6. エラー ダイアログで [閉じる] をクリックします。アプリケーションが再開します。

  7. アプリケーションを実行してフル ライセンスをシミュレートするには、手順 2 で表示される MessageBox で [Cancel] をクリックします。または、[デバッグ] メニューの [デバッグなしで開始] をクリックしてアプリケーションを実行します。このモードでは、[Buy the Application] ボタンは非表示になり、[Feature C] ボタンは有効になります。

表示: