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!