Lizenz-Manager

Unser App-Template kommt mit einem voll funktionsfähiger Lizenz-Verwaltung, welche unter anderem auch unser 3D Druckkosten-Kalkulator verwendet. Abhängigkeiten Um die Lizenz-Verwaltung nutzen zu können, sind jedoch folgende Drittanbieterlösungen nötig. Produkt erstellen und konfigurieren Um die Lizenz-Verwaltung zu aktivieren, erstelle oder bearbeite das gewünschte Produkt unter „Produkte“ in deinem WordPress-Dashboard. Bei den Produktdaten, wähle „Variables Produkt“ und…

Image Description

Unser App-Template kommt mit einem voll funktionsfähiger Lizenz-Verwaltung, welche unter anderem auch unser 3D Druckkosten-Kalkulator verwendet.

Abhängigkeiten

Um die Lizenz-Verwaltung nutzen zu können, sind jedoch folgende Drittanbieterlösungen nötig.

Produkt erstellen und konfigurieren

Um die Lizenz-Verwaltung zu aktivieren, erstelle oder bearbeite das gewünschte Produkt unter „Produkte“ in deinem WordPress-Dashboard.

Aktivieren der Lizenz-Einstellungen für ein WooCommerce Produkt
Aktivieren der Lizenz-Einstellungen für ein WooCommerce Produkt

Bei den Produktdaten, wähle „Variables Produkt“ und aktiviere „Lizenz“. Nun muss unter „Eigenschaften“ noch eine Eigenschaft angelegt werde, welche zur Unterscheidung der Varianten verwendet wird. In unserem Beispiel ist es die Eigenschaft „Lizenz“. Die Werte werden dabei mit | getrennt.

Konfiguration der Varianten
Konfiguration der Varianten

Aktiviere hier die Option „Für Varianten verwenden“. Gehe nun zu „Varianten“ und gib die jeweiligen Produktdaten zu deiner Lizenz ein, sowie den gewünschten Preis.

Abschließend wird die Lizenz unter „Lizenz“ noch konfiguriert.

Hauptinformationen zum Lizenz-Produkt
Hauptinformationen zum Lizenz-Produkt

Hier sind nur die Informationen entscheidet, welche unter „Allgemein“ angegeben werden. Die einzigartige ID wird benötigt, damit unser LicenseManager das Produkt identifizieren kann. Die Version, damit auf Updates geprüft werden kann.

App konfigurieren

Damit die App das richtige Produkt (Unique ID) in WooCommerce abfragt, musst du die Produkt-ID in der secrets.json Datei eingeben.

{
  "AppBasement": {
    //..
    "LicenseManagerProductCode": "MY-PRODUCTID"
    //..
  }
}

In der Klasse AppHostBuilderExtensions wird der LicenseManager initialisiert. Hier ist nur noch der Uri zu deiner WordPress Website anzugeben,

public static MauiAppBuilder ConfigureApp(this MauiAppBuilder builder)
{
  builder
    .RegisterDispatcher()
    .RegisterMainViewModels()
    .RegisterPageViewModels()
    .RegisterModalViewModels()
    .RegisterSettingsViewModels()
    .RegisterMainViews()
    .RegisterPageViews()
    .RegisterModalViews()
    .RegisterSettingsViews()
    .RegisterNavigationRoots()
    .ConfigureLicensing(new Uri("https://ar3dp.de"), "")
    ;

  ConfigureMappers();
  return builder;
}

Lizenz-Manager

Die Instanz des LicenseManager ist über den ServiceProvider zugreifbar. In der BaseViewModel Klasse wird dieser initialisiert.

public BaseViewModel(IDispatcher dispatcher, IServiceProvider provider) : base(dispatcher, provider)
{
    Dispatcher = dispatcher;
    Provider = provider;

    UpdateVersionBuild();
    RegisterMessages();
    InitializeLicenseServer();
}

/// <summary>
/// Initializes the LicenseManager to react on chances of the current license state.
/// </summary>
protected void InitializeLicenseServer()
{
    LicenseManager = Provider.GetServices<ILicenseManager>().First();
    LicenseManager.LicenseChanged += LicenseManager_LicenseChanged;

    IsLightVersion = !LicenseManager?.CurrentLicense?.IsValid ?? true;
}

//....

/// <summary>
/// Event if the current license info has changed. All dependencies will be updated.
/// </summary>
/// <param name="sender"><c>LicenseManager</c></param>
/// <param name="e"><c>LicenseChangedEventArgs</c></param>
protected void LicenseManager_LicenseChanged(object sender, EventArgs e)
{
  DispatchManager.Dispatch(Dispatcher, () => {
    if (e is LicenseChangedEventArgs args)
    {
      LicenseValid = args.Valid;
      IsLightVersion = !args.Valid;
      LicenseKey = args.LicenseKey;
      LastLicenseCheck = args.CheckDate;
    }
  });
}

Alle ViewModels, welche auf dem BaseViewModel basieren, werden automatisch benachrichtig, wenn sich die Lizenz ändert.

Debugging

Solange das Projekt im Debug ausgeführt wird, erscheint der Lizenz-Dialog, solange bis keine Aktivierung erfolgt hat. Dies kann in der Funktion BaseViewModel.CheckLicense() deaktiviert werden.

        [RelayCommand]
        protected async Task CheckLicense()
        {
            try
            {
                LicenseInfo licenseInfo = JsonConvertHelper.ToObject<LicenseInfo>(SettingsApp.LicenseInfo);
                if (!string.IsNullOrEmpty(licenseInfo?.License))
                {
                    bool isValid = await CheckLicenseValidAsync(licenseInfo);
                    SettingsApp.LicenseInfo = JsonConvertHelper.ToSettingsString(licenseInfo);
                    await SettingsApp.SaveSettingsAsync();
                    //IsLightVersion = !isValid;
                    // Notify all about license change
                    WeakReferenceMessenger.Default.Send(new LicenseChangedMessage(licenseInfo));
                }
#if DEBUG
                else if (true) // Set this to false to avoid showing the license enter dialog
#else
                else if (VersionTracking.Default.IsFirstLaunchEver && !LicenseActivationShown)
#endif
                {
                    // Avoids multiple popups in the first session
                    LicenseActivationShown = true;
                    await ShowLicenseActivation();
                }
                DispatchManager.Dispatch(Dispatcher, () => LastLicenseCheck = DateTime.Now);
            }
            catch (Exception exc)
            {
                //Log error
                EventManager.Instance.LogError(exc);
            }
        }

Was this article helpful to you?

Yes No

Related Articles