Uno degli elementi più controversi della User eXperience di Windows Phone è il tasto back, che per comportarsi “come l’utente si aspetta”, alle volte va gestito da programma.
Per spiegare meglio cosa intendo, utilizzerò un come esempio un’applicazione che richiede l’autenticazione dell’utente tramite Facebook la prima volta che viene utilizzata.
Un’implementazione (all’apparenza ben fatta) potrebbe essere la seguente:
1. All’avvio dell’app, viene mostrata la pagina principale. La logica di programma si accorge di non avere le credenziali dell’utente (dunque è il primo utilizzo) e mostra la pagina di autenticazione;
2. La pagina di autenticazione lancia l’autenticazione (utilizzando ad esempio Facebook SDK for .NET) che mostra la pagina web di Facebook.
3 L’utente immette i dati nella pagina web di Facebook, e si torna alla pagina iniziale dell’app.
Peccato che un’applicazione così farebbe drizzare i capelli anche a me che li ho persi da un bel pezzo, perché con quest’applicazione il tasto back si comporterebbe in un modo che l’utente giudicherebbe (eufemisticamente) non corretto.
E il motivo è presto detto:
Ogni volta che viene mostrata una pagina, la pagina precedente viene inserita nello stack “Navigation History”. Ogni volta che si preme il pulsante back, viene mostrata la pagina che sta in cima alla pila, e il riferimento a tale pagina viene rimosso dallo stack. Se lo stack è vuoto, il tasto back chiude l’applicazione.
Dunque nel nostro caso, dopo aver completato l’autenticazione ed essere tornati alla “Main Page”, il nostro stack conterrà i seguenti elementi:
Ora, dal punto di vista dell’utente, il tasto back dovrebbe farlo uscire dall’app. Infatti egli è entrato nell’app, ha svolto un lavoro, è tornato al punto di partenza (la “Main Page”) e col tasto back si aspetta di uscire dall’app. Poiché invece lo stack di Navigation History non è vuoto, la pressione del tasto back lo farà tornare nella “Facebook Page” dove gli verrebbe richiesto di nuovo di autenticarsi con Facebook! E peggio ancora, un’eventuale ulteriore pressione del tasto back lo farebbe tornare nella Login Page che automaticamente mostrerebbe la “Facebook Page”, entrando in un loop infinito:
Come si risolve il problema?
Utilizzando i vari metodi messi a disposizione dal NavigationService: GoBack() e/o RemoveBackEntry().
Per saperne di più:
- How to navigate using the back stack for Windows Phone
Happy coding!