Technology Experience
.NET World

Chiusura della propria app dopo la scadenza della trial

Qualche dettaglio sulla gestione della modalità trial delle proprie applicazioni per Windows Phone 7 la trovate in questo mio post.

Saltiamo subito all’argomento di questo post. Immaginiamo che l’App.xaml sia configurato così:

<trial:TrialManager RunAsTrial="True" Expired="TrialManager_Expired" TimerInterval="00:01:00">
    <trial:TrialManager.ApplicationPolicy>
        <trial:TimeExpirationPolicy TrialDuration="00:03:00" Mode="Lifetime" />
    </trial:TrialManager.ApplicationPolicy>
</trial:TrialManager>

 

Questo blocco XAML configura la libreria SlickThought.Phone in modo tale che la modalità trial della nostra app basi il proprio funzionamento sul tempo. In breve: dopo tre minuti di utilizzo (proprietà TrialDuration della classe TimeExpirationPolicy), viene scatenato l’evento Expired. I tre minuti sono relativi alla sessione – e non complessivamente. All’interno di questo evento possiamo fare quello che vogliamo.

Supponiamo di voler mostrare un messaggio all’utente che dica qualcosa tipo “Spiacente, la modalità trial è scaduta!”, e poi chiudiamo l’applicazione. Sfortunatamente non abbiamo a disposizione un metodo sulla classe Application di Silverlight, per cui dobbiamo escogitare il solito barbatrucco. Questo barbatrucco è raccontato a questo indirizzo, e funziona a dovere.

In breve, l’evento Expired è gestito così:

private void TrialManager_Expired(object sender, SlickThought.Phone.TrialExpirationEventArgs e)
{
    string message = LocalizationManager.GetString("TrialExpiredMessage");
    MessageBox.Show(message, "Trial", MessageBoxButton.OK);
    App.Quit();
}

 

Il metodo Quit è definito così:

internal class QuitException : Exception { }

static void Quit()
{
    throw new QuitException();
}

 

L’ultima cosa importante da fare è ritoccare l’evento…

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
    if (e.ExceptionObject is QuitException)
        return;

    if (System.Diagnostics.Debugger.IsAttached)
        System.Diagnostics.Debugger.Break();
}

 

Morale: se viene scatenata una QuitException(), viene eseguito un banale return, che fa chiudere l’applicazione senza messaggi di errore.

In questo modo l’utente vede apparire un messaggio: quando clicca su Ok per chiudere la MessageBox l’applicazione si chiude e deve riavvarla.

Ed il gioco è fatto!

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.