导出 (0) 打印
全部展开

如何在 Windows Phone 的 Silverlight 应用程序中实现试用体验

2012/2/9

本主题介绍如何在 Windows Phone 应用程序中实现试用体验。试用体验的目的是在用户提交购买应用程序之前,为用户提供一次试用应用程序的机会。试用体验通常会对应用程序有所限制,例如,通过禁用某些功能,禁用游戏中的级别,或者设置限制应用程序的使用时间。这些仅仅是在使用应用程序时受到限制的几个示例。选择什么样的应用程序限制,完全取决于您自己。在本主题中,我们将创建一个在试用模式中有功能限制的简单应用程序。也就是说,当应用程序在试用模式下运行时,会禁用某些功能。使用 LicenseInformation 类可以完成应用程序运行模式的确定。有关在 XNA Framework 应用程序中实现试用体验的信息,请参阅如何在 Windows Phone 的 XNA Framework 应用程序中实现试用体验。此应用程序中所述功能的完整示例已可供下载。有关更多信息,请参阅试用应用程序示例 (Silverlight)

本主题包含以下各节:

在本节中,您需要创建用户界面以演示具备试用体验的应用程序。这是一个 Silverlight for Windows Phone 应用程序。应用程序启动时,将检查应用程序的当前许可证。如果应用程序只有试用许可证,将禁用某种功能。如果应用程序有完整许可证,将启用所有功能。应用程序的真实许可证信息只有在发布到 Windows Phone 商城 之后才能使用。因此,若要测试试用体验,必须模拟许可证检测。当应用程序在调试模式下运行时,可以通过以编程方式在应用程序中设置一个 IsTrial 属性来完成此操作。应用程序发布后,应用程序中的 IsTrial 属性将通过检查 LicenseInformation.IsTrial 属性来进行设置。

创建应用程序用户界面

  1. 在 Visual Studio 2010 Express for Windows Phone 中,通过选择“文件 | 新建项目”菜单命令创建一个新项目。

  2. 将显示“新建项目”窗口。展开“Visual C#”模板,然后选择“Silverlight for Windows Phone”模板。

  3. 选择“Windows Phone 应用程序”模板。在“名称”中填入您选择的名称。

  4. 单击“确定”。将创建一个新的项目,并且“MainPage.xaml”将在 Visual Studio 设计器窗口中打开。

  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>
    
    

    前面的 XAML 代码会创建一个类似于以下屏幕截图的简单用户界面。

    Silverlight 试用应用程序的屏幕截图

    应用程序包含三个按钮,每个按钮代表了应用程序的一项功能。用户界面还包含显示当前许可证信息的状态文本和一个购买应用程序的按钮。前面提到的代码和屏幕截图是阐释生成试用体验核心概念的基本示例。以下各节中将定义每个按钮的事件处理程序。

本节中,您需要使用 LicenseInformation 对象来确定应用程序的当前许可证。应用程序的真实许可证信息只有在发布到 Windows Phone 商城 之后才能使用。因此,若要测试试用体验,必须模拟许可证检测。当应用程序在调试模式下运行时,可以通过以编程方式在应用程序中设置一个 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_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 指令之间的代码。系统将询问用户是否模拟试用模式。如果用户选择“确定”,_isTrial 变量将设置为 true;否则,它将设置为 false。如果应用程序在释放模式下生成,将执行 #else#endif 之间的代码,同时 _isTrial 变量将通过检查 LicenseInformation 对象上的 IsTrial 属性来设置。

  5. 应用程序开始或恢复时都需要检查应用程序的许可证。此过程通过检查 Application_LaunchingApplication_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();
            }
    
    

在本节中,使用应用程序当前许可证的相关信息来限制试用模式下的应用程序。您可以选择限制应用程序的方式。在此示例中,通过禁用代表应用程序一项功能的用户界面上的按钮来限制试用模式的应用程序。用户界面上还有一个可见的按钮,用户可以使用该按钮通过 Windows Phone 商城 调用 Show 方法来购买应用程序。由于此应用程序还未发布到 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。三个单击事件用于当用户单击用户界面中的功能按钮时显示消息。

在本节中,您需要使用 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();
            }
    
    

    在用户界面中单击“btnBuyApplication”按钮时,前面的代码将显示 Windows Phone 商城 客户端应用程序,并显示指定产品的详细信息页面。用户将可以购买应用程序。在此示例中,应用程序没有发布到 Windows Phone 商城。结果,_marketPlaceDetailTask.Show() 调用将导致显示错误消息。如果此错误的错误代码是 805a0941,则该调用在应用程序发布后就会成功并正常运行。应用程序发布之后,Show 将自动在 Windows Phone 商城 客户端应用程序中检测应用程序的唯一 ID,并启动正确的详细信息页面。

运行应用程序

  1. 在设备或模拟器中,通过选择“调试 | 启动调试”菜单命令运行应用程序。

    注意注意:

    选择试用模式模拟的选项仅在应用程序在调试模式下运行时可用。这样做可以阻止试用模式模拟在应用程序的发布版本中运行,并意外地在测试功能启用的情况下发布到 Windows Phone 商城。

  2. 应用程序启动时会显示一个消息框。单击“确定”模拟试用模式。

  3. 观察应用程序的主页面,“许可证”字段设置为“试用”,并且禁用“功能 C”按钮。

  4. 单击“购买应用程序”按钮。系统将尝试打开 Windows Phone 商城 客户端应用程序。

  5. 您将看到一个类似下图的错误对话框。这显示应用程序成功打开了 Windows Phone 商城 客户端应用程序。在已发布的应用程序上不会出现此错误,将转入 Windows Phone 商城 上应用程序的详细信息页面,在该页面,您可以购买应用程序。

    MarketplaceDetailTask.Show() 错误
  6. 单击错误对话框上的“关闭”。应用程序将恢复。

  7. 若要运行应用程序以模拟完整许可证,请单击此过程步骤二中的“MessageBox”上出现的“取消”。或者,您还可以通过选择“调试 | 开始执行(不调试)”菜单命令启动应用程序。在此模式中,将隐藏“购买应用程序”按钮,并启用“功能 C”按钮。

显示:
© 2015 Microsoft