创建Windows Phone 7的试用版程序 简单实现方案(翻译)

junwong 发布于 2012/02/08 16:26
阅读 1K+
收藏 2

原文链接: http://windowsphonegeek.com/articles/Creating-a-Windows-Phone-7-Trial-Application-Implementation-and-Best-Practices

我这次打算花3篇文章来详细谈谈一个WP7开发专题系列 "创建WP7试用版程序"  

1: 创建WP7试用版程序 实现  

2: 创建WP7试用版程序 增加现在购买的功能  

3: 创建WP7试用版程序 进一步实现现在购买的功能  

这里我们主要谈谈如何创建WP7试用版程序以及提供一些最好的实现具体方式,其中有几个关键点大家应该记住:  
1, 为什么你必须将是否为试用版的状态缓存下来.  

2, 当你打算创建试用版时必须时刻牢记的5个重点  

3, 试用版与完整版在调试时的不同点等等。  

同时我也打算给出几个网络上流传广泛的有错误的试用版实现方式。
首先, 最起码试用模式可以让你做一个能在用户确认购买前先试用一下的程序或游戏。WP7平台让开发者很容易为他的程序或游戏添加试用模式,当你在网页上提交你的应用到Windows Phone卖场时,只需要在试用应用的复选框上打勾就能决定你的应用是否具备试用功能。注意试用版是永远不会过期的,而是当用户确认购买后,试用版将会被完整版代替。  

7步就能创建wp7的试用版应用  

其实在WP7上试用功能是很容易实现的。归功于Microsoft.Phone.License.LicenseInfo 这个类提供的 IsTrial() 方法, 顾名思义, 这个方法返回一个bool值来代表当前的应用是否运行在试用模式下(true: 试用模式   false: 完整版模式).  

但是如果你的应用要通过卖场审核验证以及要创建比较人性化的应用时,你依然要考虑很多关键点。 以下就是我们对于7步创建wp7试用版应用的所有建议:  

step 1: 多考虑些问题!时刻牢记当你打算实现试用模式时你必须考虑类似应用程序生命周期以及墓碑机制这样的问题,后退按钮,性能等等,下图展示了几乎所有需要考虑到的问题:  

 

注解: 如果你打算了解更多WP7应用生命周期以及墓碑机制的话题,请看看这篇文章 WP7 Application Lifecycle and Tombstoning  

至于大家关心的性能问题,我们必须缓存 IsTrial() 返回的值, 因为  IsTrial() 方法大约花费几乎60毫秒来执行, 所以如果程序中调用这个方法过于频繁的话,可想而知这个会有多影响性能,最坏的情况就是你的应用因为这个性能问题导致无法通过wp7的卖场审核验证。   

step2: 在 App.xaml.cs 中创建一个静态bool属性来缓存是否试用模式  

创建一个public访问修饰符的bool静态属性来缓存试用状态, 如下代码所示,  我们创建一个私有的setter以至于确保这个属性不可能在外部被修改。  

public static bool IsTrial
{
    get;
    // setting the IsTrial property from outside is not allowed
    private set;
}

 

step3: 判断当前应用是否为试用模式   

在 App.xaml.cs 中创建一个方法来检验Microsoft.Phone.Marketplace.LicenseInformation IsTrial() 返回的值来判断当前的应用是否运行在试用模式下, 注意当我们刻意想在试用模式下进行调试的时候,我们刻意强行返回 true(注意下面代码的 #if TRIAL 的预编译条件):  

private void DetermineIsTrail()
{
#if TRIAL
    // return true if debugging with trial enabled (DebugTrial configuration is active)
    IsTrial = true;
#else
    var license = new Microsoft.Phone.Marketplace.LicenseInformation();
    IsTrial = license.IsTrial();
#endif
}

 

注意: 如果你是用模拟器进行开发调试的话, IsTrial()  方法将只能返回false, 唯一的解决方法就是和上面的#if TRIAL一样强行返回true来解决。   

step4: 在正确的地方来缓存/刷新 IsTrial() 方法  

最重要的就是我们必须在正确的代码段上去"刷新" IsTrial() 方法返回的状态. 以下两个地方都是必须去重新获取是否为试用模式的关键点.  

1, 当应用被启动时 -- Application_Launching   

2, 当应用被激活时 -- Application_Activated  

// Code to execute when the application is launching (eg, from Start)
// This code will not execute when the application is reactivated
private void Application_Launching(object sender, LaunchingEventArgs e)
{
    // refresh the value of the IsTrial property when the application is launched
    DetermineIsTrail();
}
 
// Code to execute when the application is activated (brought to foreground)
// This code will not execute when the application is first launched
private void Application_Activated(object sender, ActivatedEventArgs e)
{
    // refresh the value of the IsTrial property when the application is activated
    DetermineIsTrail();
}

  注意 :千万别忘了当应用被启动以及被激活时都需要重新调用 IsTrail() 并且缓存下来,否则你的程序可能在处理墓碑机制,后退按钮或者退出时出现意外状况  

所以以下代码就是你必须在App.xaml.cs中添加的  

public static bool IsTrial
{  get;    private set;}
 
private void DetermineIsTrail()
{
#if TRIAL
    IsTrial = true;
#else
    var license = new Microsoft.Phone.Marketplace.LicenseInformation();
    IsTrial = license.IsTrial();
#endif
}
 
private void Application_Launching(object sender, LaunchingEventArgs e)
{
    DetermineIsTrail();
}
 
private void Application_Activated(object sender, ActivatedEventArgs e)
{
    DetermineIsTrail();
}


step5: 先在试用/完整模式下定义不同的业务处理  

这样你就只需要调用App.xaml.cs中静态的 IsTrial 属性就能在整个程序中随时获取当前是否为试用模式了,而且这样的话,仅仅获取一个bool的静态属性是丝毫不用担心性能问题的.  

if (App.IsTrial)
{
    //add trial code here
}
else
{
    //add full code here
}


step6: 实现现在购买的功能  

我们将在这个系列的第二篇文章 :创建WP7试用版程序 -- 增加现在购买的功能 来好好说说这个问题 。  

step7: 测试你的试用版应用  

这个问题我们在下面的  “调试你的wp7试用程序” 段落中也好好说一下.  


实现WP7试用版程序时常见的错误
 

当我在网络上搜索今天这个话题时,很杯具的发现很多类似的文章中都有一些错误,我发现的几种常见错误如下:  

错误1: 虽然在静态变量中指定了是否为试用模式, 但是却忘了在 Launching 以及 Activated 事件中去重新调用 IsTrail() 方法  

错误2: 很多相关文章中,作者并没有提到在墓碑机制以及 Launching/Activated 事件处理中的解决方案(注意你需要理解整个从开始到退出流程中试用程序的处理方式并考虑所有可能出现的意外情况).  

错误3: 调用 Microsoft.Phone.Marketplace.LicenseInformation IsTrial() 的次数实在太多了,可想而知这样会消耗多少的性能。  

错误4: 缺乏测试与调试, 虽然人品好的话,没有测试与调试也能成功通过卖场审核验证,但这样做也实在太不厚道了。  

意 :对于如何实现WP7试用功能,如果你还有其它疑问的话,你可以去看看msdn的官方文档
Execution Model Overview for Windows PhoneTrial Applications Overview for Windows Phone


调试你的wp7试用版应用
 

正如我以前提到过的, 为了做个厚道人, 我建议大家发布应用前必须做足够的测试。  

如果你在模拟器中做开发测试,那么IsTrial()只能返回 false, 唯一的处理方式是在调试过程中使用硬编码的方式用条件预编译(#if TRIAL).  

另外一件重要的事情是在项目工程中更改当前的配置 ,我们可以通过以下6步来做到 :  

step1: 创建一个 Windows Phone 7 应用项目并且点击配置管理器选项 。  

   

step2: 随后会弹出一个新的配置管理器窗口,然后如图操作   

   

step3: 为新的配置命名,例如命名为 “DebugTrial” 然后选择"Debug"选项  

   

点击 ok  然后你将能看到配置管理器中的更新.  

   

step4: 关闭配置管理器窗口, 在Visual studio 2010中打开项目工程属性窗口  
 

step5: 到Build选项卡, 在Configuration下拉框选择DebugTrial, 然后添加 TRIAL 符号在Conditional compilation symbols输入框中  

step6: 好了,现在你可以去调试与测试你的应用了,只需要选择DebugTrial 配置 

 

如下就是我们判断当前的应用是否运行在试用模式下的代码

private void DetermineIsTrail()
{
#if TRIAL
    // return true if debugging with trial enabled (<strong>DebugTrial</strong> configuration is active) 
    IsTrial = true;
#else
    var license = new Microsoft.Phone.Marketplace.LicenseInformation();
    IsTrial = license.IsTrial();
#endif
}


当创建试用版应用时 你应该考虑的5个关键点

1,试用资格过期: 当用户打算试用你的应用时,他们的手机仅仅只会安装上试用版,这种版本实际上是不会过期的,但是当用户在试用的过程中购买了完整版后,手机将会下载一份完整版的授权文件来替代原来的那个试用版的授权文件。 

2, 在你的程序启动或者从后台恢复的时候,记得要检测 IsTrial() 返回值, 当用户没有购买时将会返回true,反之当用户购买了完整版则返回false 

注意: IsTrial() 方法如果在你的应用中被调用太多次的话,最好还是缓存下来,所以 IsTrial()方法以及Guide.IsTrialMode 方法最好是被设计为事件驱动模式, 因为这种方法被调用一次要消耗大约60毫秒 

3, 在试用结束时提供一个让用户购买的入口,比如你可以在程序中提供一个确认购买的窗口,我们可以通过 MarketplaceDetailTask 类的 Show() 方法来调用。 

4, 尽可能不要在试用版中靠限制用户使用时间来保护完整版应用的核心价值,一般说来,最好是在完整版中才提供全部核心功能,然后试用版提示用户这些好功能也仅仅只有存在于完整版。如果你要的试用版是依靠用户使用时间的长短做限制的话,用户可以删除你的程序后重装来避免付费。

 5, 试用版的测试。XNA Framework 的应用(一般都是游戏)应该使用GamerServices命名空间的Guide类来获取当前运行的是使用模式还是完整版模式并提供方便用户购买的入口。如果你想知道更多,请见 "Simulating Trial Mode for marketplace content"

 

为什么我们需要为自己的应用添加试用模式呢?

下面是几篇来自windows phone 7开发团队很久以前发表的为什么要在付费应用中添加试用功能的原话:

  Our theory when building this capability was that more users would consider and buy apps if they could try the app out first to see if they like it. Results?

  我们当初之所以为开发者提供试用版功能就是因为越来越多的用户能在试用过程中发现如果他们喜欢的话,他们是会考虑并且购买的。

1,用户喜欢先试用一下,带试用版的付费应用的下载次数是不带试用功能的付费应用的70倍。大家想想看,这样能增加多少潜在的购买用户啊!

2,试用版能直接刺激销量,几乎有1/10的试用版最终会被用户购买,平均算下来,这比那些不带试用版的应用销售额要多出10倍

3, 试用版被下载后能很快转化为完整付费版,超过一半的试用版能在一天时间内被转化为付费版,而且绝大部分都是用户在两小时内就确认购买了  (Windows Phone 7 Developer Blog) 


PS: 作者本人在Windows Phone 7上发布了几款带试用功能的游戏, 只要你邮件一份W-8表单到美国微软并且在App Hub 里面绑定自己的双币信用卡就能收到你的应用或游戏的销售的70%分成(当你的净收入到达200美元后,微软就开始给你的信用卡汇款),本人已经确定收到钱了,所以大家可以放心地发布收费应用或游戏来赚钱

 
这就是所有有关于WP7试用版做法的基础讲解以及实现方法, 大家可以在我们这个系列的第二篇文章:创建WP7试用版应用 -- 添加现在购买功能 

说了这么多, 大家肯定都想要我们整个的实现的代码吧,你可以从这里下载

 WP7SampleTrialAppPart1

我希望这些可以帮到你

加载中
0
华宰
华宰
尼玛啊,这个给力啊,期待另外两篇文章的翻译
0
RocWang
RocWang

请问提交给market时是上传release的文件还是DebugTrial的文件?

0
RocWang
RocWang

引用来自“RocWang”的答案

请问提交给market时是上传release的文件还是DebugTrial的文件?

我上传到选择“允许下载试用版”那项时,那个勾选框是禁用的,是怎么回事啊?
junwong
junwong
release
0
c
cloverloop
请问提交上传时,是否需要删除  #if TRIAL、  #else、  #endif 这几项,谢谢~
c
cloverloop
回复 @junwong : 謝謝~
junwong
junwong
不需要的
返回顶部
顶部