0

金融部門向けの Windows Phone 8 アプリを構築しています。クレジット カード番号などの機密情報が含まれているため、アプリの高速切り替えには 15 分のタイムアウトが必要です。つまり、ユーザーがアプリを「一時停止」し、15 分以内にアプリに戻るために [戻る] ボタンを押した場合、再開する必要があります。15 分以上経過すると、ログイン ページにリダイレクトされます。

OnNavigateFrom メソッドと To メソッドをディスパッチャ タイマーと組み合わせて使用​​してみましたが、これには 2 つの問題があります。1、アプリが中断されるとバックグラウンド プロセスが実行されないため、タイマーが停止します。2、私のアプリには複数のページがあり、アプリが一時停止されようとしているという警告はありません。アプリ内でページからページへ移動することと、アプリから完全に移動することを区別できません。

では、アプリが中断されている間にタイマーを実行することは可能ですか? それができない場合、FAS を完全にオフにして、アプリが再開されるたびにログインを再開するにはどうすればよいですか? これが Windows Phone 8 のユーザビリティ精神に反することは承知していますが、このアプリを使用する金融機関には、満たす必要がある特定の要件があります。

この件に関する Microsoft のガイドラインは次のとおりです。

http://msdn.microsoft.com/en-us/library/windows/apps/hh465088.aspx

以下は、このページからの抜粋です。

「ユーザーが最後にアクセスしてから長期間経過した場合、アプリを新たに起動する」

残念ながら、実際にそれを行う方法についての言及はありません...?

編集:

crea7or の回答のおかげで、Application_Deactivated および Application_Activated メソッドについて知ることができました。分離ストレージで時間を節約し、Actived メソッドで比較を行いました。次の2つの解決策を試しました。これでは、何も起こりません (エラーはありませんが、効果はありません):

Private Sub Application_Activated(ByVal sender As Object, ByVal e As ActivatedEventArgs)
        'Get the saved time
        Dim settings As IsolatedStorageSettings = IsolatedStorageSettings.ApplicationSettings
        Dim stime As DateTime = settings("CurrentTime")
        Dim now As DateTime = System.DateTime.Now

        If now > stime.AddSeconds(5) Then
            Dim myMapper As New MyUriMapper()
            myMapper.forceToStartPage = True
            RootFrame.UriMapper = myMapper

        End If
End Sub

この質問の答えによると、私もこれを試しました:

 Private Sub Application_Activated(ByVal sender As Object, ByVal e As ActivatedEventArgs)
        'Get the saved time
        Dim settings As IsolatedStorageSettings = IsolatedStorageSettings.ApplicationSettings
        Dim stime As DateTime = settings("CurrentTime")
        Dim now As DateTime = System.DateTime.Now

        If now > stime.AddSeconds(5) Then
            DirectCast(App.RootFrame.UriMapper, UriMapper).UriMappings(0).MappedUri = New Uri("/MainPage.xaml", UriKind.Relative)
            App.RootFrame.Navigate(New Uri("/MainPage.xaml?dummy=1", UriKind.Relative))
            App.RootFrame.RemoveBackEntry()

        End If
Ens Sub

しかし、それは Uri キャストでは失敗します。何か案は...?

4

1 に答える 1

0

Application_DeactivatedIsolatedStorageSettings に時間を節約し、Save()明示的に呼び出します。時間を読み取り、Application_Activatedタイムアウトに達した場合は、UriMaper を次のように置き換えます。

MyUriMapper myMapper = new MyUriMapper();
myMapper.forceToStartPage = true;
RootFrame.UriMapper = myMapper;

..clear the other sensitive data of your app (cards info etc.)

どこ:

public class MyUriMapper : UriMapperBase
{
    public bool forceToStartPage { get; set; }

    public override Uri MapUri( Uri uri )
    {
        if ( forceToStartPage )
        {
            forceToStartPage = false;
            uri = new Uri( "/Login.xaml", UriKind.Relative );
        }
        return uri;
    }
}
于 2014-01-06T12:31:08.723 に答える