我目前正在构建一款需要身份验证的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。这个想法是它会检查这个并相应地重定向,但行为是古怪和不一致的,它只是感觉很笨拙。
是否有任何身份验证流程的示例?想法?建议?
答案 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捕获该特定意图,注销用户,并通过消息将应用程序重定向到登录屏幕。
通过这种方式,您的用户界面无需检查用户状态,只要用户未经授权就可以将其从屏幕上取出。
值得一提的是,我的应用确实经常使用网络,因为它是一个近乎实时的应用。因此,我能够很快地捕获未经授权的事件。