2013-03-18 5 views
0

Dans l'application WP, nous devons fournir une option utilisateur pour verrouiller l'application avec mot de passe.Verrouiller l'application avec le mot de passe

Si je comprends bien le cycle de vie de l'application WP, je dois mettre la navigation à LockPage dans App.Application_Activated, App.Application_Deactivated et commencer à la page, mais je ne peux pas utiliser NavigationService dans la classe App ...

Je ne veux pas mettre le code de navigation pour verrouiller la page dans chacune des autres pages, ou il n'y a pas d'autres options?

Répondre

1

Je writed propre solution, mais peut-être ce n'est pas si élégant qu'il pourrait l'être.

App logique de verrouillage: activer l'application de verrouillage par mot de passe utilisateur, nous Application_Deactivated la manipulation et les événements Application_Closing dans l'application classe et marquage App comme verrouillé si l'utilisateur activé cette option. Ensuite, sur chaque page, nous devrions mettre check: l'application est actuellement verrouillée et si c'est le cas, nous devrions naviguer vers AppLockedWithPasswordPage. Sur AppLockedWithPasswordPage nous devons vérifier le mot de passe de l'utilisateur, s'il est correct, appelez NavigationService.GoBack().

Nous avons donc besoin de faire 6 étapes:

  1. Vous devez choisir où enregistrer IsAppCurrentlyLocked (drapeau bool), AppLockPassword (string) et IsUserEnabledAppLockWithPassword (drapeau bool).Je l'avais choisi IsolatedStorageSettings

  2. page Créer AppLockedWithPassword, où vous devez montrer TextBox et Button, ne pas oublier de fournir l'option pour l'utilisateur de réinitialiser AppLock bien sûr, avec la suppression de données d'applications

  3. AppLockedWithPasswordPage devrait empêcher la navigation BackButton, afin empêchant:

    // AppLockedWithPasswordPage 
    protected override void OnBackKeyPress(CancelEventArgs e) 
    { 
        // Preventing back key navigation 
        e.Cancel = true; 
    } 
    
  4. Vérifiez le mot de passe sur le bouton cliquez

    // AppLockedWithPasswordPage 
    private void UnlockAppButton_Click(object sender, RoutedEventArgs e) 
    { 
        if (PasswordBox.Password.Equals(IsolatedStorageSettings["AppLockPassword"])) 
        { 
         NavigationService.GoBack(); 
        } 
        else 
        { 
         // Say user, that password incorrect, etc... 
        } 
    } 
    
  5. Dans les méthodes de classe App trouvent Application_Deactivated (pour gérer l'application réduisant au minimum (bouton windows)) et Application_Closing (à gérer quand app de fermeture de l'utilisateur), nous devrions marquer l'application comme bloquée si l'utilisateur activé cette option lorsque ces événements se produit

    private void SetIsAppCurrentlyLockedFlagIfUserEnabledAppLocking() 
    { 
        if ((bool)IsolatedStorageSettings["IsUserEnabledAppLockWithPassword"]) 
        { 
         IsolatedStorageSettings["IsAppCurrentlyLocked"] = true; 
        } 
    } 
    
    private void Application_Deactivated(object sender, DeactivatedEventArgs e) 
    { 
        SetIsAppCurrentlyLockedFlagIfUserEnabledAppLocking(); 
    } 
    
    private void Application_Closing(object sender, ClosingEventArgs e) 
    { 
        SetIsAppCurrentlyLockedFlagIfUserEnabledAppLocking(); 
    } 
    
  6. et dernière étape, sur toutes les pages que vous voulez vous verrouiller devez ajouter vérifier la méthode OnNavigatedTo qui naviguera à AppLockedWithPasswordPage si l'application est actuellement verrouillé

    // Create some class, like PagesUtils or so on with check method 
    private static Uri uriToAppLockedWithPasswordPage = new Uri("pathToAppLockedWithPasswordPage", UriKind.Relative); 
    
    public static void NavigateToAppLockedWithPasswordPageIfAppLocked(PhoneApplicationPage page) 
    { 
        if ((bool)IsolatedStorageSettings["IsAppCurrentlyLocked"]) 
        { 
         page.NavigationService.Navigate(uriToAppLockedWithPasswordPage); 
        } 
    } 
    
    // In each page you want to lock add 
    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
        PagesUtils.NavigateToAppLockedWithPasswordPageIfAppLocked(); 
        base.OnNavigatedTo(); 
    } 
    

P.S. bien sûr votre code est beaucoup mieux, ce n'est par exemple simple, je l'espère vous aidera

+2

J'utiliserais une classe de base pour vos pages pour appeler 'PagesUtils.NavigateToAppLockedWithPasswordPageIfAppLocked()' de sorte que vous n'ayez pas à l'ajouter sur chaque page. –

-1

Pourquoi ne pas créer une page de démarrage où les mots de passe est entré?

Pour les instances que vous avez votre MainPage.xaml, créez une référence InsertPasswordPage.xaml sur WMAppManifest comme la page de démarrage:

<DefaultTask Name="_default" NavigationPage="InsertPasswordPage.xaml" /> 

et insérez toute la logique de mot de passe sur le InsertPasswordPage.xaml, lorsque l'utilisateur avec succès se connecte simplement à votre page principale;)

EDIT: Comme Gambit dit si l'utilisateur a appuyé sur le bouton de retour, il reviendra à la page de mot de passe d'insertion, mais vous pouvez résoudre cela en supprimant de la backstack la page après que l'utilisateur connecté dans

+2

Des problèmes avec cette approche est que lorsque l'utilisateur appuie sur le bouton Retour de MainPage, il rencontrera la page de mot de passe. En outre, si l'utilisateur saute hors de l'application à partir d'une page arbitraire, quand ils reviennent dans l'application, la page de mot de passe ne s'affiche pas pour les bloquer. – Gambit

+0

Incorrect, vous pouvez prendre la page de la pile arrière pour résoudre ce problème. Merci pour l'édition pointe de thougth la poste;) – DVD

+1

Retrait de la page à partir de la pile arrière ne résoudra pas le problème d'un utilisateur de sauter hors de l'application via le bouton Home, puis revenir dans l'application via le bouton Précédent. Même dans ce scénario de changement d'application, l'utilisateur devra être bloqué par la page de mot de passe. – Gambit

0

Vous devez ajouter la vérification dans les événements Application_Launching et Application_Activated.

L'événement de lancement lorsque l'application est d'abord ouvert et l'un pour activé lorsque l'utilisateur retourne à l'application après avoir laissé faire autre chose.

ces événements ont tous deux établi un drapeau et que la page de base que toutes vos pages héritent de chèque de ce drapeau quand vous y naviguez. La vérification doit être pour si l'indicateur est défini, si c'est le cas, affichez l'invite de connexion, puis effacez l'indicateur après une entrée de mot de passe réussie.
Cette approche traitera FAS, FAR & liens profonds, en plus de commencer l'application normalement.

Méfiez-vous Certains sélecteurs déclencheront l'événement activé lorsqu'ils retourneront à l'application. Ajouter une manipulation supplémentaire pour ceux-ci comme approprié/si nécessaire.

+0

Je gère les événements Application_Deactivated et Application_Closing et le drapeau de réglage de l'application est verrouillé, puis sur chaque page que j'ai cochée, cela ouvrira LockPage si l'indicateur est vrai –

+0

@ArtemZinnatullin Est-ce que vous dites simplement que vous avez fait ce que j'ai recommandé? Y at-il une autre question dans votre commentaire? Si ma réponse répond à votre question, vous devez accepter la réponse et la surenchère. –

+0

Non, je voulais dire que les événements Application_Launching et Application_Activated ne sont pas utiles, car je ne peux pas mettre de code de navigation sur la page AppLockedWithPassword dans cet événement. Comme vous pouvez le voir, j'ai résolu mon problème et j'ai écrit ma propre réponse. –

Questions connexes