171 lines
4.0 KiB
Markdown
171 lines
4.0 KiB
Markdown
|
|
# 观看历史模块
|
|||
|
|
|
|||
|
|
## 模块概述
|
|||
|
|
观看历史模块负责记录用户观看直播间的历史记录,用于推荐算法、用户行为分析等功能。
|
|||
|
|
|
|||
|
|
## 相关文件
|
|||
|
|
- `RoomDetailActivity.java` - 直播间详情(记录观看历史)
|
|||
|
|
- `WatchHistoryActivity.java` - 观看历史列表界面
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 接口列表
|
|||
|
|
|
|||
|
|
### 1. 记录观看历史
|
|||
|
|
**接口地址**: `POST /api/front/watch/history`
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"roomId": "string", // 直播间ID(必填)
|
|||
|
|
"watchTime": "long" // 观看时间戳(必填)
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**返回数据**:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "记录成功",
|
|||
|
|
"data": {
|
|||
|
|
"historyId": "long", // 历史记录ID
|
|||
|
|
"roomId": "string", // 直播间ID
|
|||
|
|
"userId": "integer", // 用户ID
|
|||
|
|
"watchTime": "long", // 观看时间
|
|||
|
|
"duration": "integer" // 观看时长(秒)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 功能说明
|
|||
|
|
|
|||
|
|
### 记录时机
|
|||
|
|
- 用户进入直播间时自动记录
|
|||
|
|
- 记录用户进入时间
|
|||
|
|
- 用户退出时更新观看时长
|
|||
|
|
|
|||
|
|
### 数据用途
|
|||
|
|
- 个性化推荐:根据观看历史推荐相似直播间
|
|||
|
|
- 用户画像:分析用户兴趣偏好
|
|||
|
|
- 数据统计:统计直播间热度和观看数据
|
|||
|
|
- 历史记录:用户可查看自己的观看历史
|
|||
|
|
|
|||
|
|
### 隐私保护
|
|||
|
|
- 仅记录已登录用户的观看历史
|
|||
|
|
- 用户可以清除自己的观看历史
|
|||
|
|
- 观看历史仅用户本人可见
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 使用场景
|
|||
|
|
|
|||
|
|
### 1. 进入直播间时记录
|
|||
|
|
```java
|
|||
|
|
// 在 RoomDetailActivity 的 onCreate 中调用
|
|||
|
|
private void recordWatchHistory() {
|
|||
|
|
if (!AuthHelper.isLoggedIn(this)) {
|
|||
|
|
return; // 未登录用户不记录
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (TextUtils.isEmpty(roomId)) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ApiService apiService = ApiClient.getService(getApplicationContext());
|
|||
|
|
|
|||
|
|
Map<String, Object> body = new HashMap<>();
|
|||
|
|
body.put("roomId", roomId);
|
|||
|
|
body.put("watchTime", System.currentTimeMillis());
|
|||
|
|
|
|||
|
|
Call<ApiResponse<Map<String, Object>>> call =
|
|||
|
|
apiService.recordWatchHistory(body);
|
|||
|
|
|
|||
|
|
call.enqueue(new Callback<ApiResponse<Map<String, Object>>>() {
|
|||
|
|
@Override
|
|||
|
|
public void onResponse(Call<ApiResponse<Map<String, Object>>> call,
|
|||
|
|
Response<ApiResponse<Map<String, Object>>> response) {
|
|||
|
|
if (response.isSuccessful() && response.body() != null) {
|
|||
|
|
Log.d("RoomDetail", "观看历史记录成功");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public void onFailure(Call<ApiResponse<Map<String, Object>>> call, Throwable t) {
|
|||
|
|
Log.e("RoomDetail", "观看历史记录失败: " + t.getMessage());
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 退出直播间时更新时长
|
|||
|
|
```java
|
|||
|
|
// 在 onDestroy 或 onStop 中调用
|
|||
|
|
private void updateWatchDuration() {
|
|||
|
|
if (historyId == null) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
long duration = (System.currentTimeMillis() - enterTime) / 1000; // 秒
|
|||
|
|
|
|||
|
|
// 调用更新接口(如果后端提供)
|
|||
|
|
// 或者在记录时就包含时长计算
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 扩展功能(建议)
|
|||
|
|
|
|||
|
|
虽然当前接口只有记录功能,但建议后端提供以下扩展接口:
|
|||
|
|
|
|||
|
|
### 获取观看历史列表
|
|||
|
|
```
|
|||
|
|
GET /api/front/watch/history
|
|||
|
|
参数: page, pageSize
|
|||
|
|
返回: 用户的观看历史列表
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 清除观看历史
|
|||
|
|
```
|
|||
|
|
DELETE /api/front/watch/history/{historyId}
|
|||
|
|
或
|
|||
|
|
DELETE /api/front/watch/history/clear
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 获取推荐直播间
|
|||
|
|
```
|
|||
|
|
GET /api/front/watch/recommendations
|
|||
|
|
基于观看历史推荐相似直播间
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 数据统计
|
|||
|
|
|
|||
|
|
观看历史数据可用于以下统计:
|
|||
|
|
|
|||
|
|
### 用户维度
|
|||
|
|
- 观看总时长
|
|||
|
|
- 观看直播间数量
|
|||
|
|
- 最常观看的分类
|
|||
|
|
- 观看时间分布
|
|||
|
|
|
|||
|
|
### 直播间维度
|
|||
|
|
- 总观看人数
|
|||
|
|
- 平均观看时长
|
|||
|
|
- 回访率
|
|||
|
|
- 观看高峰时段
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
1. 仅记录已登录用户的观看历史
|
|||
|
|
2. 未登录用户不会记录观看历史
|
|||
|
|
3. 记录失败不影响用户正常观看
|
|||
|
|
4. 建议异步记录,不阻塞主流程
|
|||
|
|
5. 观看时长计算应考虑用户切换后台的情况
|
|||
|
|
6. 同一用户多次进入同一直播间会产生多条记录
|
|||
|
|
7. 建议定期清理过期的历史记录(如保留最近3个月)
|