Implementieren einer Testversion Ihrer App

Wenn Sie Ihre App als kostenlose Testversion im Partner Center konfigurieren, damit Kunden Ihre App während eines Testzeitraums kostenlos verwenden können, können Sie Ihre Kunden dazu verleiten, ein Upgrade auf die Vollversion Ihrer App durchzuführen, indem Sie einige Features während des Testzeitraums ausschließen oder einschränken. Ermitteln Sie, welche Features eingeschränkt werden sollen, bevor Sie mit dem Codieren beginnen, und stellen Sie dann sicher, dass Ihre App nur dann funktioniert, wenn eine vollständige Lizenz erworben wurde. Sie können auch Features wie Banner oder Wasserzeichen aktivieren, die in der Testversion angezeigt werden, bis Kund*innen Ihre App kaufen.

In diesem Artikel wird erläutert, wie Sie Mitglieder der StoreContext-Klasse im Windows.Services.Store-Namespace verwenden, um festzustellen, ob der Benutzer über eine Testlizenz für Ihre App verfügt und benachrichtigt werden kann, wenn sich der Status der Lizenz ändert, während die App ausgeführt wird.

Hinweis

Der Windows.Services.Store-Namespace wurde in der Version 1607 von Windows 10 eingeführt und kann ausschließlich in Projekten verwendet werden, die auf Windows 10 Anniversary Edition (Build 14393 der Version 10.0) oder ein späteres Release in Visual Studio ausgelegt ist. Wenn Ihre App auf eine frühere Version von Windows 10 ausgerichtet ist, müssen Sie den Namespace Windows.ApplicationModel.Store anstelle von Windows.Services.Store verwenden. Weitere Informationen finden Sie in diesem Artikel.

Richtlinien für die Implementierung einer Testversion

Der aktuelle Lizenzstatus Ihrer App wird als Eigenschaften der StoreAppLicense-Klasse gespeichert. In der Regel platzieren Sie die Funktionen, die vom Lizenzstatus in einem bedingten Block abhängen, wie im nächsten Schritt beschrieben. Stellen Sie bei der Betrachtung dieser Features sicher, dass Sie sie auf eine Weise implementieren können, die in allen Lizenzzuständen funktioniert.

Entscheiden Sie außerdem, wie Sie Änderungen an der App-Lizenz behandeln möchten, während die App ausgeführt wird. Ihre Test-App kann voll funktionsfähig sein, verfügt aber über In-App-Anzeigenbanner, bei denen die kostenpflichtige Version nicht funktioniert. Oder Ihre Test-App kann bestimmte Features deaktivieren oder regelmäßige Meldungen anzeigen, die den Benutzer zum Kauf auffordern.

Überlegen Sie, welche Art von App Sie erstellen, und was eine gute Test- oder Ablaufstrategie dafür ist. Für eine Testversion eines Spiels ist eine gute Strategie, die Anzahl der Spielinhalte einzuschränken, die ein Benutzer spielen kann. Bei einer Testversion eines Hilfsprogramms können Sie ein Ablaufdatum festlegen oder die Features einschränken, die ein potenzieller Käufer verwenden kann.

Für die meisten Nicht-Gaming-Apps funktioniert das Festlegen eines Ablaufdatums gut, da Benutzer ein gutes Verständnis für die vollständige App entwickeln können. Im Folgenden finden Sie einige gängige Ablaufszenarien und Ihre Optionen für die Behandlung.

  • Die Testlizenz läuft ab, während die App ausgeführt wird.

    Wenn die Testversion abläuft, während Ihre App ausgeführt wird, kann Ihre App:

    • Sie unternehmen nichts.
    • Zeigen Sie Ihren Kunden eine Meldung an.
    • Fast richtig.
    • Fordern Sie Ihren Kunden auf, die App zu kaufen.

    Die bewährte Methode besteht darin, eine Meldung mit einer Aufforderung zum Kauf der App anzuzeigen, und wenn der Kunde sie kauft, fahren Sie mit allen aktivierten Features fort. Wenn der Benutzer entscheidet, die App nicht zu kaufen, schließen Sie sie, oder erinnern Sie sie daran, die App in regelmäßigen Abständen zu kaufen.

  • Testlizenz läuft ab, bevor die App gestartet wird

    Wenn die Testversion abläuft, bevor der Benutzer die App startet, wird Ihre App nicht gestartet. Stattdessen wird benutzern ein Dialogfeld angezeigt, in dem sie die Möglichkeit erhalten, Ihre App aus dem Store zu kaufen.

  • Der Kunde kauft die App, während sie ausgeführt wird.

    Wenn der Kunde Ihre App während der Ausführung kauft, finden Sie hier einige Aktionen, die Ihre App ausführen kann.

    • Führen Sie nichts aus, und lassen Sie sie im Testmodus fortfahren, bis sie die App neu starten.
    • Vielen Dank, dass sie eine Nachricht kaufen oder anzeigen.
    • Aktivieren Sie im Hintergrund die Features, die mit einer Volllizenz verfügbar sind (oder deaktivieren Sie die Nur-Testversionen).

Erläutern Sie unbedingt, wie sich Ihre App während und nach dem kostenlosen Testzeitraum verhält, damit Ihre Kunden nicht vom Verhalten Ihrer App überrascht werden. Weitere Informationen zur Beschreibung Ihrer App finden Sie unter Erstellen von App-Beschreibungen.

Voraussetzungen

Für dieses Beispiel ist Folgendes erforderlich:

  • Ein Visual Studio-Projekt für eine UWP-App (Universelle Windows-Plattform), die auf Windows 10 Anniversary Edition (Build 14393 der Version 10.0) oder ein späteres Release ausgerichtet ist
  • Sie haben eine App im Partner Center erstellt, die als kostenlose Testversion ohne Zeitlimit konfiguriert ist und diese App im Store veröffentlicht wird. Sie können die App optional so konfigurieren, dass sie während der Testphase nicht im Store auffindbar ist. Weitere Informationen finden Sie im Testleitfaden.

Der Code in diesem Beispiel geht von Folgendem aus:

  • Der Code wird im Kontext einer Seite ausgeführt, die eine ProgressRing-Klasse mit dem Namen workingProgressRing und eine TextBlock-Klasse mit dem Namen textBlock enthält. Diese Objekte werden verwendet, um anzugeben, dass ein asynchroner Vorgang auftritt, und um die entsprechenden Ausgabemeldungen anzuzeigen.
  • Die Codedatei verfügt über eine using-Anweisung für den Windows.Services.Store-Namespace.
  • Die App ist eine Einzelbenutzer-App, die nur im Kontext des Benutzers ausgeführt wird, der die App gestartet hat. Weitere Informationen finden Sie unter In-App-Käufe und Testversionen.

Hinweis

Wenn Sie über eine Desktopanwendung verfügen, die die Desktop-Brücke verwendet, müssen Sie möglicherweise zusätzlichen, in diesem Beispiel nicht aufgeführten Code hinzufügen, um das StoreContext-Objekt zu konfigurieren. Weitere Informationen finden Sie unter Verwenden der StoreContext-Klasse in einer Desktopanwendung, die die Desktop-Brücke verwendet.

Code-Beispiel

Rufen Sie beim Initialisieren der App das StoreAppLicense-Objekt für Ihre App ab, und behandeln Sie das OfflineLicensesChanged-Ereignis , um Benachrichtigungen zu erhalten, wenn sich die Lizenz ändert, während die App ausgeführt wird. Beispielsweise kann sich die App-Lizenz ändern, wenn der Testzeitraum abläuft oder der Kunde die App über einen Store kauft. Wenn sich die Lizenz ändert, rufen Sie die neue Lizenz ab, und aktivieren oder deaktivieren Sie entsprechend ein Feature Ihrer App.

Wenn ein Benutzer die App gekauft hat, empfiehlt es sich, dem Benutzer Feedback zu geben, dass der Lizenzierungsstatus geändert wurde. Möglicherweise müssen Sie den Benutzer bitten, die App neu zu starten, wenn Sie die App so codiert haben. Aber machen Sie diesen Übergang so nahtlos und schmerzlos wie möglich.

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.
        }
    }
}

Eine vollständige Beispielanwendung finden Sie im Store-Beispiel.