1

現在、認証が必要な ICS 4.0+ Android アプリを作成しています。私が抱えている問題は、次の場合のログインステータスのチェックの処理です。

  • ユーザーが最初にアプリを開く
  • ユーザーがアプリを閉じた後にアプリに戻る (再開)

私が探している動作は、アプリがメモリから削除されて再度開かれた場合に「読み込み中...」のスプラッシュ画面が表示され、再開時にユーザーがアプリに戻ったときにほとんど目立たないスプラッシュ画面が表示されることです (まだメモリ内にあります)。 .

これを確認するために現在持っているコードは次のとおりです。

    public static void checkUserStatus(Context context, boolean isPassive) {
    Log.d(TAG, "Checking user status..");
    // User is logged in and has cc
    if ( APIUtil.isLoggedIn() && UserAccount.getCreditCards().size() > 0 && isPassive == false) {
        Intent intent = new Intent(context, OtherActivity.class);
        context.startActivity(intent);
    // User is logged in but has no cc
    } else if (APIUtil.isLoggedIn() && UserAccount.getCreditCards().size() == 0) {
        Intent intent = new Intent(context, ManageCCActivity.class);
        context.startActivity(intent);
    // User is not logged in
    } else if(isPassive == false) {
        Intent intent = new Intent(context, HomeActivity.class);
        context.startActivity(intent);
    }
}

checkUserStatus は、すべてのアクティビティの onResume() で呼び出されます。これをチェックしてそれに応じてリダイレクトするという考えですが、動作は奇抜で一貫性がなく、ぎこちなく感じます。

認証フローの例はありますか? アイデア?提案?

4

2 に答える 2

2

私が使用したり、うまく機能する他の使用法を見たりしたパターンは、次のようになります。

  • ユーザーがログインして有効なデータを持っているかどうかを判断するためのロジックを にカプセル化し、Serviceそのバインドを実行しServiceます (つまり、開始または停止することはありません。バインドすることを意味します...詳細についてはドキュメント リンクを参照してください)。
  • Activityでサービスにバインドし、でバインドを解除する基本実装を実装onStart()しますonStop()。これにより、あるService場所から別の場所に移動しても、 を実行し続けることができますActivity。この情報へのアクセスが必要なActivity人は、このベースから継承します (これはすべての可能性がありますActivity)。
  • 起動Service時にのみ必要な情報をチェックし、結果をコールバックします。

これが作成するのは、アプリケーションの起動時またはユーザーがアプリケーションを離れた後に戻ったときのみをチェックし、あるアプリケーションからActivity別のアプリケーションに移動するたびに常にチェックするのではなく、承認をチェックする (かなり) 単一のインスタンスです。また、すべての作業がService.

于 2012-11-21T18:36:37.893 に答える
1

これは、私が開発しているアプリケーションで現在行っていることです。

1) StartUpActivity: ユーザーがログインしているかどうかを確認します。ユーザーの状態に応じて、ログイン画面またはメイン画面にリダイレクトします。ユーザーが資格情報を保存し、何らかの API トークンまたはセッションが必要な場合は、サイレント ログインを追加することをお勧めします。

2) 私のアプリでは、保護されたリソースにアクセスしているため、ユーザーはログインする必要があります。無効な api トークンまたは不正なログイン情報が原因でリソースにアクセスできない場合、API/ネットワーク レベルからインテントがブロードキャストされます (通常は http コード 401 または 403 に一致します)。

3) BroadcastReceiver はその特定のインテントをキャッチし、ユーザーをログアウトし、アプリをログイン画面にリダイレクトしてメッセージを表示します。

このように、UI はユーザーの状態をチェックする必要はありません。ユーザーが許可されていないときはいつでも画面から取り出せるように準備しておくだけで済みます。

私のアプリはほぼリアルタイムのアプリであるため、ネットワークを頻繁に使用することに注意してください。このため、許可されていないイベントをかなり迅速にキャッチできます。

于 2012-11-21T18:18:07.237 に答える