アプリの試用版の作成 (HTML)

[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]

アプリを無料で使うことができる試用期間を設けている場合には、その期間中に一部の機能を無効にしたり制限したりするようアプリを設計できます。また、顧客がアプリを購入する前の試用期間中にだけバナーや透かしなどが表示されるようにもできます。ここでは、このような工夫をアプリに加える方法について説明します。

試用版のアプリなど Windows 8 の主要機能を試してみたい場合は、Windows 8 のハンズオン ラボをダウンロードしてください。このラボでは、任意のプログラミング言語 (JavaScript と HTML または C# と XAML) で Windows ストア アプリのサンプルを作成する方法をモジュール形式の手順で紹介します。

理解しておく必要があること

テクノロジ

必要条件

  • 変更する Windows ランタイム アプリ

手順

ステップ 1: 試用期間中に有効または無効にする機能を選ぶ

アプリの現時点でのライセンスの状態は、LicenseInformation クラスのプロパティとして保存されています。通常は、次の手順で説明するように、ライセンスの状態に依存する関数を条件ブロック内に記述します。このような機能について検討するときには、ライセンスがどの状態であっても動作するように実装できることを確認してください。

また、アプリの実行中にライセンスが変更された場合の処理方法を決めておきます。試用版のアプリでもすべての機能を使うことができるようにしながら、購入版では表示されない広告バナーを表示することができます。また、試用版アプリでは一部の機能を無効にしたり、ユーザーに購入を勧めるメッセージを表示したりすることもできます。

アプリの性質を考慮して、それに適した試用や有効期限の戦略を立ててください。ゲームの試用版の場合は、ユーザーが遊べるゲーム コンテンツの量を制限するのが良い戦略でしょう。ユーティリティの試用版の場合は、有効期限日の設定や、ユーザーが使いたがるような機能の制限を検討するとよいでしょう。

ゲーム以外の多くのアプリでは、ユーザーにアプリ全体を理解してもらうために、有効期限日を設定するのが適しています。ここでは、有効期限に関するいくつかの一般的なシナリオと、その処理方法について説明します。

  • アプリの実行中に試用ライセンスが期限切れになった

    アプリの実行中に試用ライセンスが期限切れになった場合は、次の対処方法があります。

    • 何もしない。
    • ユーザーにメッセージを表示する。
    • 閉じる。
    • ユーザーにアプリの購入を促す。

    お勧めするのは、アプリの購入を促すメッセージを表示することです。ユーザーがアプリを購入したら、すべての機能を有効にして、そのまま使うことができるようにします。購入しなかった場合は、アプリを閉じるか、アプリの購入が必要なことを一定の間隔で通知します。

  • アプリの起動前に試用ライセンスが期限切れになった

    ユーザーがアプリを起動する前に試用ライセンスが期限切れになった場合、アプリは起動しません。ユーザーには、ストアからそのアプリを購入できることを伝えるダイアログ ボックスが表示されます。

  • アプリの実行中にユーザーがアプリを購入した

    アプリの実行中にユーザーがアプリを購入した場合は、次の対処方法があります。

    • 何もせず、アプリが再起動されるまでは試用モードを続ける。
    • 購入に対するお礼をする、またはメッセージを表示する。
    • 完全なライセンスがある場合に使うことができる機能を、通知なしで有効にする (または、試用版であることを示す表示を消す)。

ライセンスの変更を検出して、アプリで対応する場合は、次の手順で説明するように、そのためのイベント ハンドラーを追加する必要があります。

ステップ 2: ライセンス情報を初期化する

アプリを初期化するときに、この例で示されているように、アプリの LicenseInformation オブジェクトを取得してください。licenseInformation は、LicenseInformation 型のグローバル変数またはフィールドであるとします。

CurrentApp または CurrentAppSimulator を初期化して、アプリのライセンス情報にアクセスする


function initializeLicense()
{
    // (some app initialization functions)

        // Initialize the license info for use in the app that is uploaded to the Store.
        // uncomment for release
        // currentApp = Windows.ApplicationModel.Store.CurrentApp;

        // Initialize the license info for testing.
        // comment the next line for release
        currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator;

        // get the license info
        licenseInformation = currentApp.licenseInformation;

    // (other app initialization functions)
}

アプリの実行中にライセンスが変更されたときに通知を受け取るイベント ハンドラーを追加します。アプリのライセンスが変更されるのは、たとえば、試用期間が終了したときや、ユーザーがストアを通じてアプリを購入したときです。


function initializeLicense()
{
    // some app initialization functions

        // Initialize the license info for use in the app that is uploaded to the Store.
        // uncomment for release
        // currentApp = Windows.ApplicationModel.Store.CurrentApp;

        // Initialize the license info for testing.
        // comment the next line for release
        currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator;

        // Get the license info
        licenseInformation = currentApp.licenseInformation;

        // Register for the license state change event.
        licenseInformation.addEventListener("licensechanged", reloadLicense);

    // other app initializations function
}

function reloadLicense()
{
    // (code is in next steps)
}

ステップ 3: 条件ブロック内に機能のコードを記述する

ライセンスの変更のイベントが発生したときに、アプリはライセンス API を呼び出して試用の状態が変わったかどうかを判定する必要があります。この手順のコードは、このイベントのハンドラーを構造化する方法を示しています。この時点で、ユーザーがアプリを購入したら、ライセンスの状態が変わったことをユーザーに知らせることをお勧めします。コーディングの方法上、必要であれば、ユーザーにアプリを再起動してもらわなければならないこともあります。ただし、この移行は可能な限りスムーズで違和感のないようにする必要があります。

この例は、アプリの機能を必要に応じて有効にしたり、無効にしたりできるように、アプリのライセンス状態を判断する方法を示したものです。


function reloadLicense()
{
    if (licenseInformation.isActive) 
    {
        if (licenseInformation.isTrial)
        {
            // Show the features that are available during trial only.
        }
        else
        {
            // Show the features that are available only with a full license.
        }
    }
    else
    {
        // A license is inactive only when there's an error.
    }
}

ステップ 4: アプリの試用有効期限日を取得する (Windows のみ)

アプリの試用有効期限日を取得するコードを含めます。

この例のコードは、アプリの試用有効期限日を取得する関数を定義しています。ライセンスがまだ有効であれば、試用期限が切れるまでの日数で有効期限を表示します。

function displayTrialVersionExpirationTime()
{
    if (licenseInformation.isActive)
    {
        if (licenseInformation.isTrial)
        {
            var longDateFormat = Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longdate");

            // Display the expiration date using the DateTimeFormatter. 
            // For example, longDateFormat.format(licenseInformation.expirationDate) 

            var daysRemaining = (licenseInformation.expirationDate - new Date()) / 86400000;

            // Let the user know the number of days remaining before the feature expires.
        }
        else
        {
            // ...
        }
    }
    else
    {
       // ...
    }
}

ステップ 5: シミュレートされたライセンス API 呼び出しで機能をテストする

シミュレートされたライセンス サーバー呼び出しを使って、アプリをテストしてみましょう。JavaScript、C#、Visual Basic、または Visual C++ で、アプリの初期化コード内の CurrentApp への参照を CurrentAppSimulator への参照に置き換えます。

CurrentAppSimulator は、%userprofile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData にある "WindowsStoreProxy.xml" という XML ファイルから、テスト専用のライセンス情報を取得します。このパスとファイルがない場合は、インストール時か実行時にそれらを作る必要があります。WindowsStoreProxy.xml が所定の場所にない状態で CurrentAppSimulator.LicenseInformation プロパティにアクセスしようとすると、エラーになります。

この例は、異なるライセンス状態のもとでアプリをテストするときのコードを追加する方法を示します。

function appInit
{
    // some app initialization functions

        // Initialize the license info for use in the app that is uploaded to the Store.
        // uncomment for release
        // currentApp = Windows.ApplicationModel.Store.CurrentApp;

        // Initialize the license info for testing.
        // comment the next line for release
        currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator;

        // Get the license info
        licenseInformation = currentApp.licenseInformation;

    // other app initialization functions
}

WindowsStoreProxy.xml を編集して、アプリや機能のシミュレートされた有効期限日を変更できます。すべてが意図したとおりに動作するように、想定されるすべての有効期限とライセンスの構成をテストします。

ステップ 6: シミュレートされたライセンス API メソッドを実際の API に置き換える

シミュレートされたライセンス サーバーでアプリをテストした後、認定用にストアにアプリを提出する前に、CurrentAppSimulatorCurrentApp に置き換えます (次のコード例を参照)。

重要  アプリはストアへの提出時に CurrentApp オブジェクトを使っている必要があり、そうでない場合は認定が不合格になります。

 

function appInit
{
    // (some app initialization functions)

        // Initialize the license info for use in the app that is uploaded to the Store.
        // uncomment for release
        currentApp = Windows.ApplicationModel.Store.CurrentApp;

        // Initialize the license info for testing.
        // comment the next line for release
        //   currentApp = Windows.ApplicationModel.Store.CurrentAppSimulator;

        // Get the license info
        licenseInformation = currentApp.licenseInformation;

    // (other app initialization functions)
}

ステップ 7: 無料の試用版の機能についてユーザーに説明してください。

アプリの動作でユーザーが驚くことがないように、無料の試用期間中にアプリがどのように機能し、この期間が過ぎるとアプリがどのようになるかを必ず説明してください。

アプリの説明について詳しくは、「アプリの説明」をご覧ください。

関連トピック

試用アプリとアプリ内購入のサンプルに関するページ

CurrentApp

CurrentAppSimulator