有料版のアプリケーションを作成した場合、お試しで使える試用版があったほうが良いと感じています。実際に使ってみて、良いと感じたら購入してもらえます。
MSDNではこの辺りを参考にしています
試用版は有料版に対して以下の制限を(一つ、または複数)付けることができます。
- 期間で制限(15日や30日など)
- 機能で制限
「Kinect for Windows SDK v1.6 概要 C#編」のWindowsストアアプリでは、全体8章のうち2章だけを試し読みできるようにした「機能で制限」した試用版をリリースしています。
ライセンス周りは「LicenseInformation」というクラスが担当しており、このクラスは「CurrentApp」または「CurrentAppSimulator」が保持しています。アプリケーション内でLicenseInformationの状態を見ることで、ライセンス状態を確認することができます。
「CurrentApp」と「CurrentAppSimulator」はアプリケーションの状態を保持しているクラスで、「CurrentApp」は実環境、「CurrentAppSimulator」はシミュレーション環境になりますので、デバッグ環境では「CurrentAppSimulator」を、リリースする際には「CurrentApp」を利用する形になります。
ただ、この2つのクラスは、お互いに(継承関係含めて)関連がないので、実環境用とシミュレーター用でコードが2つ存在することになります。
LicenseInformation クラス
では本題に入ります。ライセンスを管理している LicenseInformation クラスは次のメンバを持っています。
イベント
- LicenseChanged:ライセンス状態が変更したときの
プロパティ
- ExpirationDate:試用期限日
- IsActive:ライセンスがアクティブであるか
- IsTrial:試用版であるか
- ProductLicenses:追加機能のライセンス
ここでは機能制限版について解説するので、LicenseChanged イベントおよび、IsActiveプロパティ、IsTrialプロパティを利用します。
LicenseChangedの登録
LicenseChanged イベントに、ライセンス変更のイベントを登録します。これで、実行中にアプリ内課金などでライセンス状態が変更されたときにも適切に処理できます。ReloadLicense()については後述します。
protected override void OnNavigatedTo(NavigationEventArgs e){
// アプリの実行中にライセンスが変更されたときに通知を受け取るイベント ハンドラーを追加
CurrentAppSimulator.LicenseInformation.LicenseChanged += LicenseInformation_LicenseChanged;
ReloadLicense();
}
void LicenseInformation_LicenseChanged()
{
ReloadLicense();
}
ライセンス状態による動作の変更
ライセンス状態によって動作を変える ReloadLicense() を実装します。IsActiveおよびIsTrial の状態によって、動作を変えます。
private async void ReloadLicense(){
await Dispatcher.RunAsync( Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
// ライセンスがアクティブである
if ( CurrentAppSimulator.LicenseInformation.IsActive ) {
// 試用版
if ( CurrentAppSimulator.LicenseInformation.IsTrial ) {
textLicense.Text = "試用版";
}
// 通常版
else {
textLicense.Text = "購入版";
}
}
// ライセンスがアクティブではない(何かしら不正な状況)
else {
}
} );
}
確認方法
さて、これで実装はできましたが、状態によって動作が変わることを確認しないといけません。CurrentAppSimulator は "WindowsStoreProxy.xml" という XML ファイルからテスト専用のライセンス情報を取得します。WindowsStoreProxy.xml のありかは「C:\Users\<ユーザー名>\AppData\Local\Packages\<パッケージファミリ名>\LocalState\Microsoft\Windows Store\ApiData」になります。
アプリケーションのパッケージファミリ名は Package.appxmanifest の 「パッケージ化|パッケージファミリ名」にあります
このXMLファイルを開くとIsActiveおよびIsTrialの状態がありますので、確認したい状態に変更することでアプリケーションの動作を変えることができます。
<LicenseInformation><App>
<IsActive>true</IsActive>
<IsTrial>false</IsTrial>
<ExpirationDate>2022-12-31T23:59:59.00Z</ExpirationDate>
</App>
<Product ProductId="AddContents">
<IsActive>false</IsActive>
</Product>
</LicenseInformation>