Utilizzare la classe LicenseInformation per gestire lo stato delle applicazioni Windows Phone

di Alessio Leoncini, in Windows Phone,

Il modello di distribuzione con il marketplace delle applicazioni trial, letteralmente "in prova", ci permette di programmare con estrema facilità le funzionalità che vogliamo rendere disponibili in modalità trial, rispetto alle funzioni delle versioni complete.
Microsoft ha deciso di curare in proprio la parte di gestione delle licenze delle applicazioni per darci una API interna ed efficiente, per togliendoci dall'onere di realizzare un nostro sistema di controllo, ma anche per rendere più "robusto" il marketplace stesso. Abbiamo già parlato dell'importanza fondamentale che hanno le app e il marketplace per la percezione degli utenti della bontà di un sistema operativo mobile, dobbiamo vedere il lavoro di Microsoft sulla gestione delle licenze proprio nell'ottica di rendere il ciclo di distribuzione-prova-acquisto delle applicazioni il migliore possibile, sia per gli sviluppatori che per gli utenti.

Di fatto, all'atto di installare un'applicazione, viene scaricata sul telefono anche una licenza che l'applicazione può interrogare per comprendere in quale modalità deve operare, trial o full. Un aspetto fondamentale, infatti, è che un'applicazione o un gioco sono distribuiti in un unico pacchetto, nella fattispecie un file XAP, per entrambe le modalità. Quindi è demandato a noi sviluppatori decidere quali funzionalità rendere disponibili nelle versioni trial, circoscrivendo esplicitamente il codice.

Nel codice, possiamo conoscere la modalità di utilizzo attraverso la classe LicenseInformation del namespace Microsoft.Phone.Marketplace. Il suo utilizzo è estremamente semplice: la classe espone il metodo IsTrial che restituisce True o False in caso di modalità trial o full:

LicenseInformation licenseInfo = new LicenseInformation();

if (!licenseInfo.IsTrial())
{
  SmsComposeTask smsTask = new SmsComposeTask();
  smsTask.Show();
}
else
{
  //funzione eseguita in modalità trial
  //vai alla pagina per chiedere l'acquisto
  NavigationService.Navigate(new Uri("/BuyPage.xaml",
                                   UriKind.Relative));
}

Il codice precedente potrebbe essere associabile alla pressione di un pulsante relativo alla funzionalità di invio SMS. Quello che facciamo è interrogare il contesto di licenza in cui sta girando l'applicazione, attraverso appunto la classe LicenseInformation, e abilitare o meno tale funzione.

L'istanza di LicenseInformation e la chiamata al metodo IsTrial hanno un discreto costo in termini d'uso di risorse ed anche il relativo tempo di esecuzione è molto elevato rispetto ad altri tradizionali oggetti del sistema. Se abbiamo la necessità di sapere la modalità di esecuzione in molte parti dell'applicazione, è corretto mantenere in memoria questa informazione nei modi tradizionali, oppure attraverso una proprietà dell'oggetto Application o anche con una classe che incapsuli LicenseInformation e che possiamo legare al ciclo di vita dell'applicazione stessa implementando l'interfaccia IApplicationService.

La scelta di realizzare una classe ci consente una maggiore flessibilità ed un suo utilizzo anche in binding, direttamente nel markup. Vediamo una possibile implementazione nell'esempio che segue:

public class LicenseManager : IApplicationService, INotifyPropertyChanged
{
  public LicenseManager(){}

  public void StartService(ApplicationServiceContext context)
  {
    Current = this;
    IsTrial = new LicenseInformation().IsTrial();
  }

  public void StopService(){}

  public static LicenseManager Current { get; private set; }

  private bool _isTrial;
  public bool IsTrial
  {
    get { return _isTrial; }
    private set
    {
      if (_isTrial != value)
      {
        _isTrial = value;
        NotifyPropertyChanged("IsTrial");
      }
    }
  }

  #region INotifyPropertyChanged
  //...
  #endregion
}

Grazie all'implementazione di IApplicationService possiamo far istanziare la classe dichiarandola nel markup di App.xaml, nella collezione degli ApplicationLifetimeObjects, così come abbiamo visto nel capitolo 8 riguardo a PhoneApplicationService.

Oltre all'utilizzo in binding attraverso la proprietà definita in precedenza, la classe LicenseManager che abbiamo preparato si presta ad un utilizzo direttamente nel markup, con l'ancor più semplice accesso diretto a LicenseManager.Current.IsTrial.

Questo script è tratto dal libro 'Sviluppare applicazioni per Windows Phone':
http://books.aspitalia.com/Windows-Phone/

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi