推广 热搜: 二手  净利2626万  北京  二手车  SMM废铜现货交易日评  企业  全国  汽车  三星  公司 

uni-app结合PHP达成单用户登陆demo的介绍

   日期:2024-09-05     来源:www.lindaur.com    作者:二手网    浏览:790    评论:0    
核心提示:[db:简介]
单用户登陆

即在一个应用中,同一个用户只能在线登陆一个,一个用户登陆,在其他设施上会被即时挤下线,确认后清空登陆该设施上的登陆装填并退回到登陆界面。

uni-app是现在能通过用vue.js框架仅需撰写一套代码同时打包Android,IOS,小程序,头条支付宝微信小程序和H5,通过用HBuilder工具便捷调试与云打包,关于苹果证书,推荐CW.PUB

用HBuilder打越狱包通过那个网站签名就能在正常苹果手机安装,不过网上还有其他些办法这里就不列举了。

一般APP做单用户登陆会用第三方消息推送平台,虽然uni-app虽然也可以对接友盟,极光等推送平台。但还是由于时间,对接平台审核等步骤时间不允许。之前用gatewayworkman和websocket做了即时聊天,所以单用户登陆也用websocket达成。

uni-app socket单用户登陆例

1.uni-app前端在初始化socke时发送目前设施的唯一标识,然后实时接收一个强制退出种类的消息,一下只不过简单示例。

//初始化socket.on(init,()={//连接初始化socket.send({type:login,token:uni.getStorageSync(access_token),device_no:plus.device.uuid,//手机设施唯一编号});}).on(quit_push,(res)={if(res){uni.showModal({title:退出公告,content:你的账号在其他设施上登录!,showCancel:true,cancelText:取消,/confirm/iText:确定,success:res={if(res./confirm/i){uni.clearStorageSync()store.commit(chat/clear)uni.reLaunch({url:../../pages/login/index})}elseif(res.cancel){uni.clearStorageSync()store.commit(chat/clear)uni.reLaunch({url:../../pages/login/index})}}});}});

2.后端接收设施唯一标识参数,先查找缓存是不是存在,没有记录设施标识和socket的clientid。

3.登陆接口接收设施标识,缓存或库里取出标识记录与目前接收的设施标识判断是不是一致,不同则依据缓存中的clientid发送消息。

$is_online=Db::name(UserLoginClient)-gt;where(user_id,$user[id])-gt;order(iddesc)-gt;find();if(isset($device_no)amp;amp;$device_noamp;amp;$is_online[device_no]!=$device_noamp;amp;!empty($is_online[device_no])){Tools::sendToClient($is_online[client_id],json_encode([type=gt;quit_push,data=gt;ip,message=gt;强制下线]));}

4.工具类sendToClient办法部分

publicstaticfunctionsendToClient($client_id,$message){Gateway::sendToClient($client_id,$message);}推送单用户登陆例

1.第一对接了友盟,包含前端后端都加了SDK和用上了他们的办法。

2.消息推送有一个唯一值token,这里简称pushtoken,由推广客户端生成,可以标识一个唯一的设施。

3.后端登陆时,接收pushtoken,同样判断该pushtoken是不是存在,没有就以用户ID为键存储。

4.存在时再判断与缓存是不是一致,一致则加长缓存时间,不同则给旧的pushtoken(缓存中的)推送一条消息,并缓存新的pushtoken。

if(self::$headTokenCache::has(self::$prefix.self::$userId)){if(self::$headToken==Cache::get(self::$prefix.self::$userId)){Cache::set(self::$prefix.self::$userId,self::$headToken,self::$timeOut);}else{//换了手机,推广客户端重新发送pushtoken到服务端,服务端与缓存中的pushtoken比较,不同则给原来pushtoken手机推送一条并重新缓存新的token//modifybywensenon20180816//$addr=getCity();$addr=getMobCity();$ip=request()-ip();if($addr){$addr[province]=empty($addr[province])?:$addr[province];$addr[city]=empty($addr[city])?:$addr[city];//$address=/t.$addr[country].-.$addr[region].-.$addr[city].(IP:.$ip.)/t;$address=/t.$addr[country].-.$addr[province].-.$addr[city].(IP:.$ip.)/t;}else{$address=IP:.$ip.;}$OldToken=Cache::get(self::$prefix.self::$userId);if(strlen($OldToken)==64){$content=array(title=APP紧急公告,body=你的账号于:.date(Y-m-dH:i:s).在.$address.处登录,若不为你本人登录,请你立即修改密码!,pull_service=login);/umeng/Push::send($OldToken,unicast,$content,message,true);}elseif(strlen($OldToken)==44){$content=array(pull_service=login,msg=你的账号于:.date(Y-m-dH:i:s).在.$address.处登录,若不为你本人登录,请你立即修改密码!);/umeng/Push::send($OldToken,unicast,$content,message,true);}Cache::set(self::$prefix.self::$userId,self::$headToken,self::$timeOut);}}else{Cache::set(self::$prefix.self::$userId,self::$headToken,self::$timeOut);}

5.APP推广客户端接收推送进行弹窗提示和退出处置。

6.以上是依据友盟的SDK封装的推送办法,其中包含单播,广播,跳应用activity,跳网页连接等等。

 
标签: PHP
打赏
 
更多>同类二手资讯
0相关评论

热门推荐
推荐图文
推荐二手资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  免责声明  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报