安卓开发统计用户在线时长
来源:互联网 发布:淘宝商品如何上架 编辑:程序博客网 时间:2024/05/01 05:40
有3种方案:
1、客户端定时发送请求到服务器端。实现方法是在用户登录后,将uid,session_id,login_time插入一条记录,然后在客户端js设定一个计时器,比如每10分钟向服务器端发送一个请求,以此来达到更新登出时间的目的,当然这个间隔时间设定的越短,数据可能会越准确,不过相应的系统的负载也会越高,这个可以根据实际情况设定一个合适的值。这种方法广泛应用于webgame上,因为webgame的几乎所有请求都是ajax请求,不用刷新页面,一旦刷新页面,这个计时器就失去了价值,这也是这个方法的局限性。
2、务器设定一个定时轮询的脚本。这个方法是在服务器端写一个定时执行的脚本,比如5分钟执行一次,根据数据库中的记录来判断每个会话的 session_id是否还存在于服务器上,如果存在就更新logout_time,不存在就跳过。这样也能比较准确的统计在线时间,不过缺点是需要有服务器的控制权,不然无法设定定时脚本,linux系统可以通过crontab实现,windows系统可以通过计划任务来完成。如果你只是买的虚拟主机,那么这个方法也同样不适合你。
3、在用户每次活动时更新一下登出时间。这样在用户不活动或者退出的时候,登出时间就自然而 然的存在于数据库里了。首先,在用户登录成功后,记录下其uid,session_id,并将现在时间作为登陆时间,现在时间 600s作为登出时间,插入数据库。
上面3种方案是针对PC端浏览器而言的,我们可以借鉴一下,采取第一种方案并加以改进:
每隔1分钟发一次请求,把(当前用户id、登录时间戳、目前在线时长)发送给服务器。服务器接收到请求,根据用户id去数据库对应的表里查,看该登录时间戳是否存在,如果不存在,则添加一条记录,如果存在,则更新在线时长。如果连续失败5次,那么就可以看做本次已经登出了,更新登录时间戳,失败次数归0,继续执行。
package com.vzone.tmdsdk.task;import com.vzone.tmdsdk.model.net.API;import com.vzone.tmdsdk.model.net.RequestParams;/** * 提交登录时长发送给服务器 */public class TimeTask extends BaseTask implements Runnable { private long mStartTimeMillis; private String mUserId; private int mFailTimes; public TimeTask(long startTimeMillis, String userId) { this.mStartTimeMillis = startTimeMillis; this.mUserId = userId; } @Override public void run() { //System.out.println("time"); if (UserCondition.isOnForeground && NetworkTool.isNetworkConnected()) { RequestParams requestParams = new RequestParams(); requestParams.addRequestParam("uid", UserCondition.ACCOUNT_ID); requestParams.addRequestParam("appid", UserCondition.APPID); requestParams.addRequestParam("imei", UserCondition.IMEI); requestParams.addRequestParam("app_version", UserCondition.APP_VERSION); requestParams.addRequestParam("login_time", mStartTimeMillis / 1000); // 持续时间(秒) requestParams.addRequestParam("duration", (System.currentTimeMillis() - mStartTimeMillis) / 1000); // 判断结果 String result = submitPostRequest(API.URL_ONLINE_TIME, requestParams); JSONObject jsonObject = JsonTool.getJsonObject(result); boolean operateSuc = ResponseTool.dealResponse(jsonObject, "online", "在线时间更新"); if (!operateSuc) { mFailTimes++; } else { mFailTimes = 0; } if (mFailTimes > 5) { // 连续5次发送失败,那么就断定该用户已经登出了,更新登录时间,失败次数归0 mStartTimeMillis = System.currentTimeMillis(); mFailTimes = 0; } } else { mStartTimeMillis = System.currentTimeMillis(); mFailTimes = 0; } }}
注意:直接传用户id是不安全的,建议和服务器端配合好,采用token或加密。
- 安卓开发统计用户在线时长
- 文本数据处理:统计用户在线时长
- scala实战之spark用户在线时长和登录次数统计实例
- asp 实现同一帐号,防止多人同时登录、获取在线列表、实现登录日志(可用户统计在线时长),适合用户访问量大的系统
- asp 实现同一帐号,防止多人同时登录、获取在线列表、实现登录日志(可用户统计在线时长),适合用户访问量大的系统
- 在线用户统计
- 在线用户统计
- 在线用户统计
- 用户在线统计实现
- 统计在线用户
- 统计在线用户
- 统计用户在线列表
- 在线用户统计
- 在线登录用户统计
- 统计在线用户人数
- 统计在线用户 踢人
- javaEE SSH框架记录在线登录用户以及登录用户的在线时长
- ASP 统计用户在线时间
- Android基于人脸识别的用户注册/登录实现思路
- IOS开源框架SJFramework
- RabbitMQ (四) 路由选择 (Routing)
- Apache跨域配置
- 当键盘挡住输入框时候,可以使的界面自动上移
- 安卓开发统计用户在线时长
- 解决webview 输入法软键盘遮挡输入框
- log4j.properties配置详解与实例-全部测试通过
- RabbitMQ (五)主题(Topic)
- Android引用控件之ViewPager
- matlab链接MySQL数据库配置方法
- 用图片打造的网站,原来并不是不能优化的
- LightOJ 1236 - Pairs Forming LCM(素因子分解)
- chrome 插件的成果