0

WP アプリケーションでは、アプリをパスワードでロックするユーザー オプションを提供する必要があります。

WP アプリのライフサイクルを理解しているので、LockPage へのナビゲーションを App.Application_Activated、App.Application_Deactivated とスタート ページに配置する必要がありますが、App クラスで NavigationService を使用することはできません...

ページをロックするためのナビゲーション コードを他のページに挿入したくありませんか、それとも他のオプションはありませんか?

4

3 に答える 3

1

私は独自の解決策を書きましたが、それができるほどエレガントではないかもしれません。

アプリのロックロジック:ユーザーはパスワードを使用してアプリのロックを有効にします。AppクラスでApplication_DeactivateイベントとApplication_Closingイベントを処理し、ユーザーがこのオプションを有効にした場合はアプリをロック済みとしてマークします。次に、各ページでチェックを行う必要があります。アプリは現在ロックされていますか。ロックされている場合は、AppLockedWithPasswordPageに移動する必要があります。AppLockedWithPasswordPageで、ユーザーのパスワードを確認する必要があります。正しい場合は、NavigationService.GoBack()を呼び出します。

したがって、6つのステップを実行する必要があります。

  1. IsAppCurrentlyLocked(ブールフラグ)、AppLockPassword(文字列)、およびIsUserEnabledAppLockWithPassword (ブールフラグ)を保存する場所を選択する必要があります。私はIsolatedStorageSettingsを選択しました

  2. TextBoxとButtonを表示する必要があるAppLockedWithPasswordページを作成します。もちろん、アプリデータを削除してAppLockをリセットするオプションをユーザーに提供することを忘れないでください。

  3. AppLockedWithPasswordPageはBackButtonナビゲーションを防ぐ必要があるため、次のようにします。

    // AppLockedWithPasswordPage
    protected override void OnBackKeyPress(CancelEventArgs e)
    {
        // Preventing back key navigation
        e.Cancel = true;
    }
    
  4. ボタンクリックでパスワードを確認

    // 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. AppクラスのfindApplication_Deactivate(アプリの最小化(Windowsボタン)を処理する)およびApplication_Closing(ユーザーがアプリを閉じるときに処理する)メソッドで、このイベントが発生したときにユーザーがこのオプションを有効にした場合、アプリをロック済みとしてマークする必要があります

    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. 最後のステップとして、ロックするすべてのページに、アプリが現在ロックされている場合にAppLockedWithPasswordPageに移動するOnNavigatedToメソッドにチェックを追加する必要があります。

    // 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();
    }
    

PSもちろん、実際のコードの方がはるかに優れています。これは単純な例です。お役に立てば幸いです。

于 2013-03-19T06:13:09.060 に答える
0

Application_Launchingandイベントにチェックを追加する必要がありApplication_Activatedます。

アプリが最初に開かれたときの起動イベントと、ユーザーが何か他のことをするために離れた後にアプリに戻ったときのアクティブ化されたイベント。

これらのイベントにフラグを設定し、すべてのページが継承するベースページに、移動時にこのフラグをチェックしてもらいます。フラグが設定されているかどうかを確認する必要があります。設定されている場合は、ログインプロンプトを表示し、パスワードの入力が成功した後にフラグをクリアします。
このアプローチは、アプリを通常どおりに起動することに加えて、FAS、FAR、ディープリンクを処理します。

一部のチューザーは、アプリに戻ったときにアクティブ化されたイベントをトリガーすることに注意してください。必要に応じて/必要に応じて、これらの処理を追加します。

于 2013-03-18T18:11:08.107 に答える
-1

パスワードを入力するスタートページを作成してみませんか?

MainPage.xamlがある場合は、InsertPasswordPage.xamlを作成して、開始ページとしてWMAppManifestで参照します。

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

そして、ユーザーが正常にログインしたら、InsertPasswordPage.xamlにすべてのパスワードロジックを挿入します。メインページに移動するだけです;)

編集:Gambitが言ったように、ユーザーが戻るボタンを押すと、パスワードの挿入ページに戻りますが、ユーザーがログインした後にページをバックスタックから削除することでこれを解決できます。

于 2013-03-18T15:24:22.377 に答える