2012-04-03 8 views
0

ウェブアプリ関連のAndroidアプリがあり、これを使用するにはユーザーがログインする必要があります。ユーザーは、ログイン画面のアクティビティにログインし、他のアクティビティに進みます。ユーザーがアクティビティを開始するたびに、アプリは自分のログイン認証情報を再度確認します(認証情報はどこかの中央データベースに保存されます)。ログイン画面にユーザーをキックする方法スタック内の他のすべてのアクティビティを通過するアクティビティ?

ユーザが1つのアクティビティから別のアクティビティにジャンプするときに、ユーザのログインクレデンシャルがサービスから取り消されているように見せかけます。次回ユーザがアクティビティを訪れたときに、彼はもはやアクセス権がないことをアプリは見るでしょう。アプリはユーザーをログイン画面のアクティビティに戻すはずです。

しかし、ユーザーがアプリを使用したときにアプリが作成したアクティビティのスタックが既に存在するため、ログイン画面はどのように取得されますか。ログイン画面のアクティビティ(アプリケーションのスタックの一番下にあるアクティビティ)に達するまで、すべてのアクティビティを殺したり破壊したりしますか?

または、新しいログイン画面アクティビティを開始して、それに直接進みますか?

FLAG_ACTIVITY_CLEAR_TOPをインテントに渡してログイン画面アクティビティを呼び出す必要がありますか?

アクティビティがスタック内の唯一のものであれば、2回目のログイン(ユーザーの資格情報を元に戻す)ができたら、戻るボタンを押すとアプリから彼が引き抜かれます彼の資格が取り消される前に彼がやっていたことに戻ること。これに最善のアプローチは何ですか?

+0

質問には1つの回答はありません。それは多くの設計上の決定に大きく左右されます。 – Falmarri

+0

ええ、私は今それを認識します。人々がこれに使うベストプラクティスがあるかどうかはわかりませんでした。 –

答えて

2

私の個人的な選択は、ユーザーの資格情報をonResume()でチェックするために(ログインアクティビティのほかに)すべてのアクティビティを設定することです(私は継承によってこれを行い、すべてのアクティビティを抽象的に継承します。何があなたのために働くか)。ユーザーが資格情報を持っていない場合(資格がないか、または取り消されたため)、ログインアクティビティはI startActivityForResult()になります。 LoginActivityが有効なユーザーを返す場合は、すべて正常です。ユーザーが以前にログインしたユーザーとは違うものであれば、私はFLAG_ACTIVITY_CLEAR_TOPで自分のルートアクティビティに持っていきます。 loginActivityから戻るボタンを押すと、アプリは自宅にまっすぐに戻ってくるので、それは良いことではありません。

このアプローチでは、アプリケーションを(短く)残しても、資格情報をいつどのようにチェック/取り消すかを柔軟に判断できます。

+0

ありがとうございます。私が想定している 'FLAG_ACTIVITY_CLEAR_TOP'を意味しますか? –

+0

@Jakobud oops ...はい – JRaymond

0

ログイン画面のアクティビティはFLAG_ACTIVITY_CLEAR_TOPとなりますが、すべてのユーザーの履歴は削除されます。彼らがクレデンシャルを更新してから戻ると気になりますか?それは彼らの歴史を保存すべきでしょうか?

FLAG_ACTIVITY_SINGLE_TOPFLAG_ACTIVITY_NO_HISTORYはログインアクティビティとみなされます。

以前のすべてのタスクがログイン画面にリダイレクトされるようにするには、onResumeのチェックをして、権限が取り消された後に戻ることができないようにしてください。

manifest<activity>要素でこれらのフラグを設定することもできます。

関連する問題