2010-10-22 17 views
5

Sto creando un'applicazione per Windows Phone 7 con semantica di accesso/uscita (autenticandosi con un'app Web). Quando l'utente si disconnette, torno alla schermata di accesso e dimentico l'autenticazione della sessione.Come si cancella la cronologia di navigazione in Silverlight/Windows Phone 7?

Nel fare ciò desidero anche cancellare la cronologia di navigazione in modo che non possa tornare a una pagina che si aspetta che sia già autenticata.

Non riesco a vedere come farlo con NavigationService e mi chiedo se c'è un modo per farlo.

risposta

6

Ci sono alcune cose da guardare qui. Per prima cosa raccomando di familiarizzare con la guida qui offerta.

Introducing the concept of “Places” - Peter Torr's Blog

Redirecting an initial navigation - Peter Torr's Blog (giù al momento mi dispiace)

Se siete in grado di lavorare all'interno di questa guida che è il percorso migliore. Vi è un consiglio specifico per trattare le schermate di accesso.

Se si è costretti a offrire una funzione di tasto home. Fai attenzione a come lo applichi, poiché i certificatori stanno respingendo le app per comportarsi in modo inaspettato rispetto alla navigazione. Sento che se questa funzione è dietro un pulsante di casa dovresti essere ok nel reparto sorpresa. Come questo si erge nel tempo con la certificazione vedremo. Probabilmente lo scenario di "disconnessione" si applica allo stesso modo.

Ecco tre approcci da Richard Woo, Maarten Struys, Sam Jarawan.

+0

Grazie Mick. Non vedo l'ora di leggere quel post quando ritorna. Ho difficoltà a vedere come lo scenario tipico di accesso e disconnessione, specialmente quando si effettua l'autenticazione con risorse remote, si inserisca in quello che ho letto sulle regole di navigazione di Windows Phone. – dkackman

+0

In realtà c'erano due post, ho modificato in precedenza - leggi nell'ordine presentato. Il suo blog è tornato indietro. –

+1

Sembra che questo avviso sia entrato anche nella documentazione di recente. http://msdn.microsoft.com/en-us/library/gg278407%28v=VS.92%29.aspx –

0

Ho paura che non è possibile cancellare la pila di pagine e, inoltre, la tua app non supererà la certificazione. More info

3

Questo codice funziona bene (ha bisogno di essere nella tua pagina), non hanno cercato di farlo passato la certificazione ancora, ma il codice funziona:

while (true) 
{ 
    if (this.RemoveBackEntry() == null) 
    { 
     break; 
    } 
    } 

questo non sembra differire con la documentation, che dice che verrà sollevata un'eccezione quando non ci sono più elementi, quindi ho logged a bug sulla voce dell'utente per questo, quindi potrebbe cambiare in futuro.

0

Un modo più semplice per cancellare solo il backstack è fare la seguente

while (NavigationService.CanGoBack) 
{ 
    NavigationService.RemoveBackEntry(); 
} 

Attenzione però che se fate questo in caso onLoaded che verrà fuoco ogni volta che la pagina viene navigato e cliccando di nuovo sarà chiudi l'app!

Nota importante: se si utilizza un webcontrol o il sistema di annunci NAX, il backkey viene utilizzato sia dalla pagina che dal controllo Web, pertanto l'app verrà utilizzata anziché tornare a una pagina.

** Aggiornamento anche appena trovato una versione mano ancora più breve dal centro dev MS

while (NavigationService.RemoveBackEntry() != null); 

Una semplice linea.Nizza

0

Si dovrebbe creare evento "Loaded" per la tua pagina

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
    { 
     try { while (NavigationService.RemoveBackEntry() != null) ; } 
     catch (System.NullReferenceException ex) { } 
    }