创建wp7试用版应用 增加现在购买的功能(翻译)

junwong 发布于 2012/02/11 10:41
阅读 536
收藏 0

英文原文:
http://windowsphonegeek.com/articles/Creating-a-Windows-Phone-7-Trial-Application-Adding-Buy-Now-Functionality

这是“创建WP7试用版应用”系列文章的第二篇,第一篇文章可以点击这里看看。

今天我们主要谈谈如何在wp7试用版程序中添加"现在购买"的功能,也将通过演示以及源码来展示几个不同的途径来实现今天我们主要完成的功能。

 

首先再说一遍:试用版授权证书其实是不会过期的,而是当用户确认购买后被完整版的授权证书替代而已。所以这就是我们为什么要提供一种既合适又人性化的方式提示用户区购买你的完整版应用。 

 

以标准方式实现"现在购买"的功能

要以标准方式实现“现在购买”功能的最简单方式就是使用NavigationService提供的页面导航功能了。这里我们首先创建两个分离的页面 FullFunctionPage.xaml 与 BuyPage.xaml 页面。

FullFunctionPage.xaml - 用户在这个页面将能看到当前是否运行的是完整版应用。

BuyPage.xaml - 当用户要确认购买你的应用时将会展现。

 

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="auto" />
    </Grid.RowDefinitions>
    <TextBlock Grid.Row="0" TextWrapping="Wrap" FontSize="40"
               Text="This functionality is only available in the full version. Click the buy button bellow in order to purchase the full version." />
    <Button Grid.Row="1" Content="Buy full version" Click="Button_Click" />
</Grid>

这里展示了我们该如何实现确认购买的处理,将用户带到卖场中并直接显示我们的应用购买界面。

using Microsoft.Phone.Tasks;

private void Button_Click(object sender, RoutedEventArgs e)
{
    MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask();
    marketplaceDetailTask.Show();
}


我们可以使用 App.IsTrial 来决定当前应该是哪个页面应该展现。(关于App.IsTrial这个静态属性,大家可以参考我们前一篇文章)

 MainPage.xaml.cs

if (App.IsTrial)
{
    // show buy now page
    this.NavigationService.Navigate(new Uri("/BuyPage.xaml", UriKind.Relative));
}
else
{
    // show full function page
    this.NavigationService.Navigate(new Uri("/FullFunctionPage.xaml", UriKind.Relative));
}

下图就是导航以及界面UI的演示


虽然上面这种方式是一个好的实现方案但不是适合所有情形的,假如你的应用有很酷的UI,大量的动画以及特殊的风格,那么用户也会希望看到你应用的“现在购买”功能也肯定是相同的风格。

 

用弹窗提示方式来实现"现在购买"的功能

如果要用弹窗方式来做的话,我们将使用 Coding4Fun MessagePrompt 控件,毕竟这个控件是可以几乎完全自定义的而且比起标准的MessageBox也要好很多,例如我们可以为弹窗框添加一个复合的内容(例如图片等等),当然你必须在项目中添加这个引用 Coding4Fun.Phone.Controls.dll and Microsoft.Phone.Controls.Toolkit

 注意:如果你向知道更多关于Coding4Fun MessagePrompt控件的话,你可以参考这篇文章

 示例1: 使用WP7页面

此示例中,我们使用刚刚创建的 BuyPage.xaml 页面来作为弹窗框的主题内容。下面就是具体的实现方式:
MainPage.xaml.cs

if (App.IsTrial)
{
    // show buy now popup
    MessagePrompt prompt = new MessagePrompt();
    prompt.Body = new BuyPage();
    prompt.ActionPopUpButtons.Clear();
    prompt.Overlay = new SolidColorBrush(Color.FromArgb(155,41, 41, 41));
 
    prompt.Show();
}
else
{
    // show full function page
    this.NavigationService.Navigate(new Uri("/FullFunctionPage.xaml", UriKind.Relative));
}


 

示例2: 使用用户控件

此示例中,我们将创建一个名为BuyNowUserControl.xaml的用户控件,然后我将在几个不同的使用场景中来展示这玩意。

场景1: 我们在BuyNowUserControl.xaml用户控件中添加“现在购买”的图片:
BuyNowUserControl.xaml

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="300"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Border Grid.Row="0" Background="YellowGreen">
    <TextBlock   TextWrapping="Wrap" FontSize="32" Padding="10"
                   Text="This functionality is only available in the full version. Click the buy button bellow in order to purchase the full version." />
    </Border>
    <Image Grid.Row="1" Source="buy_now1.png" Stretch="None" MouseLeftButtonDown="Image_MouseLeftButtonDown"/>
</Grid>

BuyNowUserControl.xaml

public partial class BuyNowUserControl : UserControl
{
    public BuyNowUserControl()
    {
        InitializeComponent();
    }
 
    private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask();
        marketplaceDetailTask.Show();
    }
}

 

以下就是展示我们是如何程序中其他部分与 BuyNowUserControl 用户控件是如何建立联系的。
MainPage.xaml.cs

if (App.IsTrial)
{
    // show buy now page
    MessagePrompt prompt = new MessagePrompt();
    prompt.Body = new BuyNowUserControl();
    prompt.ActionPopUpButtons.Clear();
    prompt.Background = new SolidColorBrush(Colors.White);
    prompt.Overlay = new SolidColorBrush(Color.FromArgb(155,41, 41, 41));
     
    prompt.Show();
}
else
{
    // show full function page
    this.NavigationService.Navigate(new Uri("/FullFunctionPage.xaml", UriKind.Relative));
}


场景2:在MessagePrompt弹窗框内添加"现在购买"的按钮:
MainPage.xaml.cs

if (App.IsTrial)
{
    // show buy now popup
    MessagePrompt prompt = new MessagePrompt();
    prompt.Body = new BuyNowUserControl();
    prompt.IsCancelVisible = true;
    prompt.ActionPopUpButtons.RemoveAt(0);
    Button button = new Button();
    button.Margin = new Thickness(0, -10, 0, 0);
    button.Click += new RoutedEventHandler(button_Click);
    Image img = new Image();
    img.Source = new BitmapImage(new Uri("buy_now.png", UriKind.RelativeOrAbsolute));
    button.Content = img;
    prompt.ActionPopUpButtons.Add(button);
    prompt.Overlay = new SolidColorBrush(Color.FromArgb(155,41, 41, 41));
     
    prompt.Show();
}
else
{
    // show full function page
    this.NavigationService.Navigate(new Uri("/FullFunctionPage.xaml", UriKind.Relative));
}

void button_Click(object sender, RoutedEventArgs e)
{
    MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask();
    marketplaceDetailTask.Show();
}

在这个示例中,我使用的只是普通按钮,但如果你刚好闲着没事做的话,也可以用Coding4Fun RoundButton :-)


特别注意: 当你测试你的试用版程序时(此程序还未通过Marketplace的审核),你必须设定一个可用的验证符(就是WP7应用的唯一卖场ID)

MarketplaceDetailTask task = new MarketplaceDetailTask();
task.ContentType = MarketplaceContentType.Applications;
task.ContentIdentifier = "82a23635-5bd9-df11-a844-00237de2db9e";
task.Show();

笔者自己的话:但是如果你的应用是准备发布到Marketplace的话,你必须去除 task.ContentIdentifier的赋值,否则确认购买就是跳到别人的应用确认购买界面了,到时候你就哭吧 : (

  

以上就是今天要讲的所有内容,好累啊,下次请期待我们"创建WP7试用版应用"的第三部分: 更进一步实现现在购买的功能,我们将展示如何依据试用版程序第一次启动的日期来自动让程序显示或隐藏某些关键信息。

 

放出今天的所有源码吧:

 WP7TrialAppBuyNowSample

哥希望这文章对大家有用!



加载中
返回顶部
顶部