次の方法で共有


アプリの試用版を実装する

お客様が試用期間中に アプリを無料で使用できるようにパートナー センターでアプリを無料試用版として構成 する場合は、試用期間中に一部の機能を除外または制限することで、顧客にアプリのフル バージョンへのアップグレードを誘導できます。 コーディングを開始する前に制限する必要がある機能を決定し、完全なライセンスが購入されたときにのみアプリで機能を許可することを確認します。 顧客がアプリを購入する前に、試用版中にのみ表示されるバナーや透かしなどの機能を有効にすることもできます。

この記事では、Windows.Services.Store 名前空間の StoreContext クラスのメンバーを使用して、ユーザーがアプリの試用版ライセンスを持っているかどうかを判断し、アプリの実行中にライセンスの状態が変更された場合に通知を受け取る方法について説明します。

Windows.Services.Store 名前空間は Windows 10 バージョン 1607 で導入され、Windows 10 Anniversary Edition (10.0; Build 14393) またはそれ以降のリリースを対象とするプロジェクトでのみ、Visual Studioで使用できます。 アプリが以前のバージョンの Windows 10 を対象とする場合は、Windows.Services.Store 名前空間ではなく、Windows.ApplicationModel.Store 名前空間を使用する必要があります。 詳細については、こちらの記事を参照してください。

試用版を実装するためのガイドライン

アプリの現在のライセンス状態は、 StoreAppLicense クラスのプロパティとして格納されます。 通常、次の手順で説明するように、ライセンスの状態に依存する関数を条件付きブロックに配置します。 これらの機能を検討するときは、すべてのライセンス状態で機能する方法で実装できることを確認してください。

また、アプリの実行中にアプリのライセンスに対する変更を処理する方法を決定します。 試用版アプリはフル機能ですが、有料版では表示されないアプリ内広告バナーを持つことができます。 または、試用版アプリで特定の機能を無効にしたり、ユーザーに購入を求める通常のメッセージを表示したりできます。

作成しているアプリの種類と、それに対する適切な試用または有効期限の戦略について考えてください。 ゲームの試用版では、ユーザーがプレイできるゲーム コンテンツの量を制限することをお勧めします。 ユーティリティの試用版の場合は、有効期限を設定するか、潜在的な購入者が使用できる機能を制限することを検討してください。

ほとんどのゲーム以外のアプリでは、ユーザーが完全なアプリを十分に理解できるため、有効期限の設定は適切に機能します。 一般的な有効期限のシナリオと、それらを処理するためのオプションを次に示します。

  • アプリの実行中に試用版ライセンスの有効期限が切れる

    アプリの実行中に試用版の有効期限が切れた場合、アプリは次のことができます。

    • 何もしない。
    • 顧客にメッセージを表示します。
    • 閉める。
    • 顧客にアプリの購入を求めるメッセージを表示します。

    ベスト プラクティスは、アプリの購入を求めるメッセージを表示し、顧客がアプリを購入した場合は、すべての機能を有効にして続行することです。 ユーザーがアプリを購入しないことを決定した場合は、アプリを閉じるか、定期的にアプリを購入するように通知します。

  • アプリを起動する前に試用版ライセンスの有効期限が切れる

    ユーザーがアプリを起動する前に試用版の有効期限が切れると、アプリは起動しません。 代わりに、ユーザーには、ストアからアプリを購入するためのオプションを提供するダイアログ ボックスが表示されます。

  • お客様がアプリを実行中に購入する

    実行中に顧客がアプリを購入した場合、アプリで実行できるいくつかのアクションを次に示します。

    • 何もせず、アプリを再起動するまで試用モードで続行します。
    • 購入していただいたことに感謝するか、メッセージを表示してお知らせください。
    • フル ライセンスで使用可能な機能をサイレントモードで有効にします (または、試用版のみの通知を無効にします)。

お客様がアプリの動作に驚かないように、無料試用期間中および無料試用期間後にアプリがどのように動作するかを必ず説明してください。 アプリの説明の詳細については、「アプリの 説明を作成する」を参照してください。

[前提条件]

この例には、次の前提条件があります。

  • Windows 10 Anniversary Edition (10.0; ビルド 14393) または 以降のリリースを対象とするユニバーサル Windows プラットフォーム (UWP) アプリ用の Visual Studio プロジェクト。
  • パートナー センターで、時間制限のない 無料試用版 として構成されたアプリを作成し、このアプリをストアに公開しました。 必要に応じて、テスト中にストアで検出できないようにアプリを構成できます。 詳細については、テスト ガイダンスのを参照してください。

この例のコードでは、次のことを前提としています。

  • このコードは、 という名前の ProgressRingworkingProgressRingという名前の TextBlock を含む textBlock のコンテキストで実行されます。 これらのオブジェクトは、非同期操作が発生していることを示し、出力メッセージをそれぞれ表示するために使用されます。
  • コードファイルには、があり、Windows.Services.Store 名前空間の ステートメントを使用しています。
  • アプリは、アプリを起動したユーザーのコンテキストでのみ実行されるシングル ユーザー アプリです。 詳細については、「アプリ内購入と試用版の」を参照してください。

デスクトップ ブリッジを使用するデスクトップ アプリケーションがある場合は、この例に示されていないコードを追加して、StoreContext オブジェクトを構成する必要があります。 詳細については、「デスクトップ ブリッジを使用するデスクトップ アプリケーションでの StoreContext クラスの使用」を参照してください。

コード例

アプリが初期化されている場合は、アプリの StoreAppLicense オブジェクトを取得し、 OfflineLicensesChanged イベントを処理して、アプリの実行中にライセンスが変更されたときに通知を受け取ります。 たとえば、試用期間が経過した場合や、顧客がストアを通じてアプリを購入した場合、アプリのライセンスが変更される可能性があります。 ライセンスが変更されたら、新しいライセンスを取得し、それに応じてアプリの機能を有効または無効にします。

この時点で、ユーザーがアプリを購入した場合は、ライセンスの状態が変更されたことをユーザーにフィードバックすることをお勧めします。 あなたがそのようにコーディングしている場合は、アプリの再起動をユーザーに依頼する必要があるかもしれません。 しかし、この移行を可能な限りシームレスで痛みのないものにします。

private StoreContext context = null;
private StoreAppLicense appLicense = null;

// Call this while your app is initializing.
private async void InitializeLicense()
{
    if (context == null)
    {
        context = StoreContext.GetDefault();
        // If your app is a desktop app that uses the Desktop Bridge, you
        // may need additional code to configure the StoreContext object.
        // For more info, see https://aka.ms/storecontext-for-desktop.
    }

    workingProgressRing.IsActive = true;
    appLicense = await context.GetAppLicenseAsync();
    workingProgressRing.IsActive = false;

    // Register for the licenced changed event.
    context.OfflineLicensesChanged += context_OfflineLicensesChanged;
}

private async void context_OfflineLicensesChanged(StoreContext sender, object args)
{
    // Reload the license.
    workingProgressRing.IsActive = true;
    appLicense = await context.GetAppLicenseAsync();
    workingProgressRing.IsActive = false;

    if (appLicense.IsActive)
    {
        if (appLicense.IsTrial)
        {
            textBlock.Text = $"This is the trial version. Expiration date: {appLicense.ExpirationDate}";

            // Show the features that are available during trial only.
        }
        else
        {
            // Show the features that are available only with a full license.
        }
    }
}

完全なサンプル アプリケーションについては、ストアのサンプルを参照してください。