Android 端“被挤下线”功能的实现

2017-11-15 sun_____xin code小生

作者 | sun_____xin

地址 | http://www.jianshu.com/p/f61b69cad212

声明 | 本文是 sun_____xin 原创,已获授权发布,未经原作者允许请勿转载

单点登录(被挤下线)分析

所谓的被挤下线功能,即一个账号在A客户端保持登陆状态,然后又在B客户端进行了登陆操作,那么A客户端就会被挤下线。

服务端需要返回 Token,每次在app登录时为 app 分配一个新的 token,如果在某次请求中 app 传递 token 不是最新的,则视为需要重新登录,在token失效的情况下,返回约定好的code

App如何知道该账户已经在其他设备上登陆了呢?有三种实现方式

api请求中后台返回特定的code。缺点是需要下次请求才知道被踢下线

使用推送。后台可以推送给APP,从而使APP得知已在其他地方登陆,可以及时响应。

使用第三方的监听器。比如集成了环信,环信自身有提供连接状态的接听,通过监听环信的用户状态,从而达到监听app自身用户系统的效果

我们的项目中集成了环信的即时聊天,所以就使用了环信的监听器监听用户状态,用来判断是否已在其他地方登陆,实现挤下线功能。

具体实现

  1. 首先在初始化环信的时候设置一个全局的监听器里面注册一个连接监听。

// 注册连接监听EMChatManager.getInstance().addConnectionListener(connectionListener);
  1. 实现这个连接监听,的那个检测到连接断开的时候判断是用户被移除还是连接冲突即账号在其他地方登陆,做出相应的操作。

// create the global connection listenerconnectionListener = 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    }};
  1. 我们只关心账号在别处登陆,这个时候,我们一般要跳转到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。

  1. 回到 MainActivity 中的 onNewIntent 方法

@Overrideprotected 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 端“被挤下线”功能的实现 2017-11-15 sun_____xin code小生 作者 | sun_____xin 地址 | http://www.jianshu.com/p/相关推荐

  1. Android端“被挤下线”功能的实现

    单点登录(被挤下线) 所谓的被挤下线功能,即一个账号在A客户端保持登陆状态,然后又在B客户端进行了登陆操作,那么A客户端就会被挤下线. 服务端需要返回Token,每次在app登录时为app分配一个新的 ...

  2. Android 端“被挤下线”功能的实现

    作者 | sun_____xin 地址 | http://www.jianshu.com/p/f61b69cad212 声明 | 本文是 sun_____xin 原创,已获授权发布,未经原作者允许请勿 ...

  3. Android 集成环信实现单点登录校验,账号异地被挤下线功能。

    前言 其实所说的被挤下线功能,就是一个账号在A客户端保持登陆状态,然后又在B客户端进行了登陆操作,那么A客户端就会被顶下线 很多伙伴在开发自己公司产品的时候,一般都会考虑用户账号安全,或者用户账号功能 ...

  4. android端集成FTP文件下载功能

    我使用的是ftp4j的SDK,非常轻巧易用,可以轻松的实现类似文件管理器的功能,但我的项目需求只要求下载,所以就只实现了下载功能. 官方地址:http://www.sauronsoftware.it/ ...

  5. 云豹app直播源码Android 端获取相册图片功能的具体实现教程

    app直播源码开发时,关于动态功能的实现,通常采用类似于朋友圈式图文+视频模式,这就需要通过访问手机相册获取用户图片进行下一步操作,接下来就请跟随小编一起,从app直播源码角度探究云豹直播系统在这个功 ...

  6. java强制下线 session,登录的多地挤下线功能 redis session

    使用redis储存session 使用redis 存储 信息 和本地session 做比较 如果相同 表明是同一次登录 如果和redis不同 表明不是同一次登录 强制下线即可 req.headers. ...

  7. SpringBoot集成单点登录-“被挤下线”

    SpringBoot配置单点登录 前言 你好,未来!上个周末过的还行,逛街逛到腿发软,生活还是要有仪式感,一生要待自己待你最亲近的人.周一休息,顺便看了看04版天龙八部,塑造了三位英雄人物,共同点:热 ...

  8. UMP(2.0.2) Unity Android端开发

    准备在Android端实现视频播放的功能模块,视频流格式为http,根据CSDN上大咖的开发经验,我使用了Universal Media Player插件进行功能实现. 一.环境 1.Unity201 ...

  9. camera360android版有全景功能吗,Camera360 for Android新版发布留声功能

    Camera360 for Android新版发布留声功能 2013年07月08日 16:56作者:李万里编辑:李万里文章出处:泡泡网原创 分享 6月13日,手机摄影软件Camera360 for A ...

最新文章

  1. cocos2dx 场景的切换
  2. 月薪40-60k| 银牛微电子Inuitive招计算机视觉算法、应用软件等岗位
  3. 第62天:手风琴效果
  4. [unreal4入门系列之二] 下载和安装虚幻4游戏引擎
  5. oracle创建定时任务
  6. BUG总结—— No mapping found for HTTP request with URI
  7. linux启动redis_Redis简介
  8. DCASE三次挑战赛概览
  9. 面试字节跳动Android工程师该怎么准备?深度解析,值得收藏
  10. Spring MVC 反射对象和依赖注入
  11. 开机自动启动_工控机断电恢复后自动开机的设置方法
  12. Android 数据Parcel序列化过程源码分析
  13. Python单下划线与双下划线
  14. 计算机课堂热身游戏,电脑课我们常玩的13个小游戏
  15. SPSS常用方法及操作
  16. Cglib动态代理实现方式
  17. 【开发经验】fiddler实现请求转发
  18. Note Of Effective C++ 、More Effective C++ And Effective Modern C++
  19. 互联网晚报 | 05月16日 星期一 | 上海:6月1日至6月中下旬全面恢复正常生产生活;微软IE浏览器将于6月16日正式退役...
  20. 视频教程-Java工程师必学系列课程之4--《Java Swing》视频课程-Java

热门文章

  1. 华为专利收入超过支出/ 拼多多海外版下载火爆/ 百度计划增投200台无人车... 今日更多新鲜事在此...
  2. 如何设置打开PDF是固定页面比例
  3. C语言标准CRC-8校验函数
  4. 沈阳工学院本科有计算机吗,沈阳工学院是几本大学,沈阳工学院是一本还是二本...
  5. SAFe 6.0(一)
  6. viewer调用api使用图片查看器并实现图片的下载
  7. 各行业的联络中心解决方案
  8. C++——第一章 基本语言
  9. 无货源店铺是什么?怎么做?
  10. 1376:信使(msner)