zhibo/模块文档/16-观看历史模块.md
2025-12-30 11:11:11 +08:00

171 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 观看历史模块
## 模块概述
观看历史模块负责记录用户观看直播间的历史记录,用于推荐算法、用户行为分析等功能。
## 相关文件
- `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个月