Android使用WebSocket实现设备登录限制(与后台建立长连接)

本文介绍了在海外环境下,由于第三方SDK限制,选择使用WebSocket实现在Android机顶盒或电视上实现用户登录限制功能。当同一微信账号在不同设备登录时,已登录设备将自动退出。主要工作集中在发送和接收消息,保持长连接。代码实现中,WebSocket被置于Service中,由Activity控制其生命周期。

前言:由于我们的项目是一款针对于海外用户的APP,国内的一些第三方SDK
会受到一些限制,项目中要做的一个功能,本来国内使用极光推送就可以完全实现,然后我们就部署了,但是做完之后发现国外的用户有时候会收不到推送信息,这时候联系极光的客服,对方说需要开通海外服务器的权限(其实就是开通VIP),然后给了几天的测试,效果确实不错,然后价格也确实不错,千人日活的年费大概是3万元左右,我们现在应用的总用户达到了600多万(具体日活就不说了),费用可想而知,最后就给PASS掉了,有点说 跑偏了。。。接下来进入正题:
APP运行环境:
机顶盒或电视

实现的功能
1:用户打开微信登录页面,使用手机微信扫描二维码完成登录功能。
2:用户在设备A登录成功,用同一个微信账号在设备B登录,设备A退出
3:用的打开微信支付页面,用户扫码付款后关闭支付页面并显示到期时间。(和1逻辑一样)
具体实现:
其实Android端要做的事情很少,基本就是一个发送和接收的过程,然后做一个心跳,保证和服务端的长连接不会断掉,能收到服务端发送过来的信息并且处理就可以了。本来这个功能使用轮询也可以做到,功能1和3使用轮询是没有问题的,因为他们只是在一个Activity页面中去做这个事情,大不了给他一个时间,固定的时间内没有完成操作直接把页面和轮询关掉就可以了,这时候对应用本身是没有任何影响的,但是功能2就不一样了,只要是登录状态下,应用就要一直和后台保持连接,如果服务器有信息发送过来就要立马接收并且退出账号(其实也可以把这个功能放到页面间的跳转或者某个事件里面,但是需求如此,没有办法。。。),好了,废话又开始了,直接上代码:

  /**
     * 心跳检测时间
     */
    private static final long HEART_BEAT_RATE = 15 * 1000;//每隔15秒进行一次对长连接的心跳检测
    private static final String WEBSOCKET_HOST_AND_PORT = "ws://ws.*****.net:8090";//替换为自己的主机名和端口号
    private WebSocket mWebSocket;
    // 初始化socket
    private void initSocket() throws UnknownHostException, IOException {
   
   
        OkHttpClient client = new OkHttpClient.Builder().readTimeout(0, TimeUnit.MILLISECONDS).build();
        Request request = new Request.Builder().url(WEBSOCKET_HOST_AND_PORT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值