这篇文章主要为大家展示了“Android端如何实现单点登录“被挤下线”功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android端如何实现单点登录“被挤下线”功能”这篇文章吧。
创新互联建站是一家集网站建设,昭平企业网站建设,昭平品牌网站建设,网站定制,昭平网站建设报价,网络营销,网络优化,昭平网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
单点登录(被挤下线)
所谓的被挤下线功能,即一个账号在A客户端保持登陆状态,然后又在B客户端进行了登陆操作,那么A客户端就会被挤下线。
服务端需要返回Token,每次在app登录时为app分配一个新的token,如果在某次请求中app传递token不是最新的,则视为需要重新登录,在token失效的情况下,返回约定好的code
App如何知道该账户已经在其他设备上登陆了呢?有三种实现方式
api请求中后台返回特定的code。缺点是需要下次请求才知道被踢下线
使用推送。后台可以推送给APP,从而使APP得知已在其他地方登陆,可以及时响应。
使用第三方的监听器。比如集成了环信,环信自身有提供连接状态的接听,通过监听环信的用户状态,从而达到监听app自身用户系统的效果
我们的项目中集成了环信的即时聊天,所以就使用了环信的监听器监听用户状态,用来判断是否已在其他地方登陆,实现挤下线功能。
1、首先在初始化环信的时候设置一个全局的监听器里面注册一个连接监听。
// 注册连接监听 EMChatManager.getInstance().addConnectionListener(connectionListener);
2、实现这个连接监听,的那个检测到连接断开的时候判断是用户被移除还是连接冲突即账号在其他地方登陆,做出相应的操作。
// create the global connection listener connectionListener = new EMConnectionListener() { @Override public void onDisconnected(int error) { if (error == EMError.USER_REMOVED) { onCurrentAccountRemoved(); } else if (error == EMError.CONNECTION_CONFLICT) { onConnectionConflict(); } } @Override public void onConnected() { // in case group and contact were already synced, we supposed to // notify sdk we are ready to receive the events } };
3、我们只关心账号在别处登陆,这个时候,我们一般要跳转到MainActivity,然后强制弹出对话框提示用户重新登陆。
/** * 账号在别的设备登录 */ protected void onConnectionConflict() { Intent intent = new Intent(appContext, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(Constant.ACCOUNT_CONFLICT, true); appContext.startActivity(intent); }
这个地方检测到登陆冲突之后需要回到MainActivity,并为MainActivity携带了一个标识和一个标记位Intent.FLAG_ACTIVITY_NEW_TASK,表示在一个新的task中开启一个Activity,如果包含这个Activity的task已经在运行,那么这个Activity就回到前台显示。然后回调onNewIntent()方法处理这个Intent。
4、回到MainActivity中的onNewIntent方法
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intent.getBooleanExtra(Constant.ACCOUNT_CONFLICT, false) && !isConflictDialogShow) { showConflictDialog(); } else if (intent.getBooleanExtra(Constant.ACCOUNT_REMOVED, false) && !isAccountRemovedDialogShow) { showAccountRemovedDialog(); } }
首先会判断标识,如果是账户冲突就会弹出对话框提示用户跳转登陆页面重新登陆。另外这个对话框是不能取消也不可关闭的。
这样被挤下线功能就基本实现了。
以上是“Android端如何实现单点登录“被挤下线”功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!