Notice: 函数 WP_Scripts::localize 的调用方法不正确$l10n 参数必须是一个数组。若要将任意数据传递给脚本,请改用 wp_add_inline_script() 函数。 请查阅调试 WordPress来获取更多信息。 (这个消息是在 5.7.0 版本添加的。) in /data/www/appblog/wp-includes/functions.php on line 6131

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);
    }
}
上一篇 Android使用AOP做登录拦截
下一篇 Android Studio 3.x上使用Lombok