文章目录
一、实现单终端登陆方案
场景:一个账号只能单终端登陆,第二个终端登陆的时,提示上个在线的终端,提示下线,须重新登陆。
实现方案:基于友盟推送实现。ionic的友盟插件改造移步另外一遍博客,基于Android系统开发ionic调用友盟SDK的Cordova插件
前端流程改造:
简要说明:
- 启动app,输用户名和密码,点击登陆。
- 在登陆之前,需要获取友盟注册成功返回的deviceToken,如果获取失败,后端是无法进行单特定设备推送的。
- 将获取到deviceToken传给后端接口,同时登陆成功,开启获取插件中的推送消息的定时任务。
- 定时只要收到推送消息,立马弹出提示,账号已经在其他设备登陆,需要重新登陆,同时清除定时任务。
- 只要前端消费掉插件中的消息,那么缓存在插件中的消息,直接清除或者置空。防止,多次消费。
- 为什么采用定时任务方案?
- 因为友盟推送,app后台运行,这个推送消息就消费掉了,但是我们app内是无法获取该推送记录。
- 拿不到这推送记录,当我们app在线的时候,就无法提示用户,账号已在其他终端登陆,需要重新登陆。
- 采用定时方案,消息缓存在插件中,只要登陆成功,这个定时就在手机中执行,就算你放后台处理,只要你一打开应用,就会给出及时的提示。
后端流程改造:
简要说明:
- 登陆获取传输的deviceToken,与库中的非空deviceToken比较。
- 如果一致,正常登陆
- 如果不一致,获取最新在线的deviceToken进行推送。