金融部門向けの 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 キャストでは失敗します。何か案は...?