Android集中式登录架构设计思想

方案有两种,一种是hook到AMS拦截startActivity中的intent,在启动activity的时候判断是否登录,如果没有对intent做动态替换,另一种就是通过AOP实现方法添加判断登录代码片段。hook对系统有兼容性,需要考虑到各个版本的api是否改动,而AOP的实现方式与版本没有任何兼容性问题,所以最后采用AOP的方式去实现app集中式登录。

所有的登录请求都会回调到ILogin接口,这也意味着登录事件只有一个统一的入口,这也就是集中式登录架构的核心好处。

如果我们嫌弃在需要判断登录状态的按钮上加入@LoginFilter()注解麻烦,而是想实现启动一个Activity自动判断是否登录,如果没有登录就回调到ILogin接口,那么只需要创建一个LoginFilterActivity如下:

//直接过滤登陆,不需要加注解,则继承`LoginFilterActivity`
public class LoginFilterActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (!LoginAssistant.getInstance().getILoginFilter().isLogin(getApplicationContext())) {
            Toast.makeText(this, "没有登录!", Toast.LENGTH_SHORT).show();
            startActivityForResult(new Intent(this, LoginActivity.class), 0);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (!LoginAssistant.getInstance().getILoginFilter().isLogin(getApplicationContext())) {
            Toast.makeText(this, "登录失败!", Toast.LENGTH_SHORT).show();
            finish();
        }
    }
}

然后我们让需要登录才能进入的Activity继承自LoginFilterActivity即可。假如UserActivity继承LoginFilterActivity,当用户没有登录的时候,启动UserActivity便会回调到ILogin接口,这就是集中式登录架构。

public class ExtendsLoginFilterActivity extends LoginFilterActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_extends_login_filter);
    }
}

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/18/design-concept-of-android-centralized-login-architecture/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Android集中式登录架构设计思想
方案有两种,一种是hook到AMS拦截startActivity中的intent,在启动activity的时候判断是否登录,如果没有对intent做动态替换,另一种就是通过AOP实现方法添加……
<<上一篇
下一篇>>
文章目录
关闭
目 录