如何在Android上进行身份验证时重定向?

时间:2012-11-21 17:59:40

标签: android authentication

我目前正在构建一款需要身份验证的ICS 4.0+ Android应用。我遇到的问题是在以下情况下处理登录状态:

  • 用户首先打开应用
  • 用户在关闭(恢复)后返回应用

我正在寻找的行为是,如果应用程序从内存中删除并重新打开,则会出现“loading ...”启动画面,然后当用户在恢复时返回应用程序时,会出现几乎无法察觉的启动画面(仍然在记忆中。)

我目前检查的代码是:

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

在每个活动的onResume()中调用checkUserStatus。这个想法是它会检查这个并相应地重定向,但行为是古怪和不一致的,它只是感觉很笨拙。

是否有任何身份验证流程的示例?想法?建议?

2 个答案:

答案 0 :(得分:2)

我使用并看到其他用途的模式看起来很像:

  • 封装您所拥有的逻辑,以确定用户是否已登录并将有效数据导入Service,然后运行Service绑定(意味着您永远不会启动或停止它,绑定到它... docs link for more on that)。
  • 实施与Activity中的服务绑定的基本onStart()实现,并在onStop()中解除绑定。这允许Service在从Activity移动到另一个Activity时保持运行。是否有任何需要访问此信息的Activity从此基础继承(可能是Service}。
  • Activity仅在启动时检查所需信息,然后回复结果。

这会创建一个(相当)单一的检查授权的实例,该实例仅检查应用程序何时启动或用户在离开之后返回,而不会在您从Service移动到另一个{{1}}时不断检查。如果用户提前离开,它还可以优雅地完成任何长时间运行的操作,因为所有工作都在{{1}}完成。

答案 1 :(得分:1)

这就是我现在正在开发的应用程序。

1)StartUpActivity:检查用户是否登录。根据用户状态重定向到登录屏幕或主屏幕。如果用户保存了凭据并且需要某种api令牌或会话,您可能需要添加静默登录。

2)在我的应用中,用户必须登录,因为它正在访问一些受保护的资源。如果由于api令牌无效或登录信息不正确而无法访问资源,则会从API /网络级别广播目标(通常与http代码401或403匹配)

3)BroadcastReceiver捕获该特定意图,注销用户,并通过消息将应用程序重定向到登录屏幕。

通过这种方式,您的用户界面无需检查用户状态,只要用户未经授权就可以将其从屏幕上取出。

值得一提的是,我的应用确实经常使用网络,因为它是一个近乎实时的应用。因此,我能够很快地捕获未经授权的事件。