Files
oneapp_docs/touch_point/oneapp_touch_point.md
2025-09-24 14:08:54 +08:00

594 lines
17 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.

# OneApp Touch Point - 触点服务主模块
## 模块概述
`oneapp_touch_point` 是 OneApp 的触点服务主模块,负责用户触点数据的收集、管理和分析。该模块通过跟踪用户在应用中的各种交互行为,构建完整的用户行为路径,为用户体验优化、个性化推荐和业务决策提供数据支撑。
## 核心功能
### 1. 用户触点数据收集
- **行为事件跟踪**:记录用户的点击、滑动、停留等行为
- **页面访问跟踪**:跟踪用户的页面访问路径和时长
- **功能使用统计**:统计各功能模块的使用频率
- **异常行为监控**:监控和记录异常的用户行为
### 2. 触点事件跟踪和分析
- **事件分类管理**:对触点事件进行分类和标签管理
- **实时事件处理**:实时处理和响应触点事件
- **事件关联分析**:分析事件之间的关联关系
- **趋势分析**:分析用户行为的趋势变化
### 3. 用户行为路径记录
- **用户旅程映射**:构建完整的用户旅程地图
- **转化漏斗分析**:分析用户在关键流程中的转化情况
- **路径优化建议**:基于数据分析提供路径优化建议
- **异常路径识别**:识别和分析异常的用户行为路径
## 技术架构
### 架构设计
```
┌─────────────────────────────────────┐
│ 应用界面层 │
│ (Application UI) │
├─────────────────────────────────────┤
│ OneApp Touch Point │
│ ┌──────────┬──────────┬──────────┐ │
│ │ 数据收集 │ 事件处理 │ 行为分析 │ │
│ ├──────────┼──────────┼──────────┤ │
│ │ 路径跟踪 │ 数据存储 │ 报告生成 │ │
│ └──────────┴──────────┴──────────┘ │
├─────────────────────────────────────┤
│ 数据处理层 │
│ ┌──────────┬──────────┬──────────┐ │
│ │ 数据清洗 │ 数据聚合 │ 数据分析 │ │
│ └──────────┴──────────┴──────────┘ │
├─────────────────────────────────────┤
│ 数据存储层 │
│ (Local DB + Remote Analytics) │
└─────────────────────────────────────┘
```
### 核心组件
#### 1. 触点数据收集器 (TouchPointCollector)
```dart
class TouchPointCollector {
// 记录触点事件
Future<void> trackEvent(TouchPointEvent event);
// 记录页面访问
Future<void> trackPageView(PageViewEvent event);
// 记录用户行为
Future<void> trackUserAction(UserActionEvent event);
// 批量上传数据
Future<bool> uploadBatchData();
}
```
#### 2. 事件分析器 (EventAnalyzer)
```dart
class TouchPointEventAnalyzer {
// 分析用户行为模式
Future<UserBehaviorPattern> analyzeUserBehavior(String userId, TimeRange timeRange);
// 生成用户旅程
Future<UserJourney> generateUserJourney(String userId, String sessionId);
// 计算转化率
Future<ConversionRate> calculateConversionRate(ConversionFunnel funnel);
// 识别异常行为
Future<List<AnomalousEvent>> detectAnomalousEvents(AnalysisConfig config);
}
```
#### 3. 路径跟踪器 (PathTracker)
```dart
class UserPathTracker {
// 开始路径跟踪
Future<String> startPathTracking(String userId);
// 记录路径节点
Future<void> recordPathNode(String sessionId, PathNode node);
// 结束路径跟踪
Future<UserPath> endPathTracking(String sessionId);
// 获取用户路径历史
Future<List<UserPath>> getUserPathHistory(String userId, int limit);
}
```
#### 4. 数据管理器 (TouchPointDataManager)
```dart
class TouchPointDataManager {
// 存储触点数据
Future<bool> storeTouchPointData(TouchPointData data);
// 查询触点数据
Future<List<TouchPointData>> queryTouchPointData(DataQuery query);
// 清理过期数据
Future<int> cleanupExpiredData(Duration retentionPeriod);
// 导出数据
Future<String> exportData(ExportConfig config);
}
```
## 数据模型
### 触点事件模型
```dart
class TouchPointEvent {
final String id;
final String userId;
final String sessionId;
final EventType type;
final String category;
final String action;
final String? target;
final Map<String, dynamic> properties;
final DateTime timestamp;
final String pageUrl;
final String? referrer;
final DeviceInfo deviceInfo;
final LocationInfo? locationInfo;
}
enum EventType {
click, // 点击事件
view, // 查看事件
scroll, // 滚动事件
input, // 输入事件
search, // 搜索事件
purchase, // 购买事件
share, // 分享事件
download, // 下载事件
upload, // 上传事件
custom // 自定义事件
}
```
### 用户路径模型
```dart
class UserPath {
final String id;
final String userId;
final String sessionId;
final DateTime startTime;
final DateTime endTime;
final List<PathNode> nodes;
final Duration totalDuration;
final String? goalAchieved;
final Map<String, dynamic> metadata;
}
class PathNode {
final String id;
final String pageUrl;
final String pageName;
final DateTime entryTime;
final DateTime? exitTime;
final Duration? duration;
final List<TouchPointEvent> events;
final String? exitMethod;
final Map<String, dynamic> pageData;
}
```
### 用户行为分析模型
```dart
class UserBehaviorPattern {
final String userId;
final TimeRange analysisPeriod;
final List<String> frequentPages;
final List<String> preferredFeatures;
final Map<String, int> actionCounts;
final List<BehaviorInsight> insights;
final double engagementScore;
final UserSegment segment;
}
class ConversionFunnel {
final String name;
final List<FunnelStep> steps;
final Map<String, ConversionMetric> metrics;
final DateTime analysisTime;
}
class ConversionMetric {
final int totalUsers;
final int convertedUsers;
final double conversionRate;
final Duration averageTime;
final List<String> dropOffReasons;
}
```
## API 接口
### 数据收集接口
```dart
abstract class TouchPointTrackingService {
// 跟踪事件
Future<ApiResponse<bool>> trackEvent(TrackEventRequest request);
// 批量跟踪事件
Future<ApiResponse<BatchResult>> trackBatchEvents(BatchTrackRequest request);
// 跟踪页面访问
Future<ApiResponse<bool>> trackPageView(PageViewRequest request);
// 跟踪用户会话
Future<ApiResponse<String>> trackUserSession(SessionRequest request);
}
```
### 数据分析接口
```dart
abstract class TouchPointAnalyticsService {
// 获取用户行为分析
Future<ApiResponse<UserBehaviorPattern>> getUserBehaviorAnalysis(BehaviorAnalysisRequest request);
// 获取转化漏斗分析
Future<ApiResponse<ConversionFunnelResult>> getConversionAnalysis(ConversionAnalysisRequest request);
// 获取用户旅程分析
Future<ApiResponse<UserJourneyResult>> getUserJourneyAnalysis(JourneyAnalysisRequest request);
// 获取实时分析数据
Future<ApiResponse<RealtimeAnalytics>> getRealtimeAnalytics();
}
```
### 数据管理接口
```dart
abstract class TouchPointDataService {
// 查询触点数据
Future<ApiResponse<List<TouchPointData>>> queryTouchPointData(DataQueryRequest request);
// 导出触点数据
Future<ApiResponse<String>> exportTouchPointData(ExportRequest request);
// 删除用户数据
Future<ApiResponse<bool>> deleteUserData(DeleteUserDataRequest request);
// 获取数据统计
Future<ApiResponse<DataStatistics>> getDataStatistics(StatisticsRequest request);
}
```
## 配置管理
### 触点跟踪配置
```dart
class TouchPointConfig {
final bool enableTracking;
final bool enableRealTimeAnalysis;
final int batchUploadSize;
final Duration uploadInterval;
final List<EventType> trackedEventTypes;
final Duration dataRetentionPeriod;
final bool enableLocationTracking;
final PrivacyLevel privacyLevel;
static const TouchPointConfig defaultConfig = TouchPointConfig(
enableTracking: true,
enableRealTimeAnalysis: true,
batchUploadSize: 100,
uploadInterval: Duration(minutes: 5),
trackedEventTypes: [
EventType.click,
EventType.view,
EventType.search,
EventType.purchase,
],
dataRetentionPeriod: Duration(days: 90),
enableLocationTracking: false,
privacyLevel: PrivacyLevel.standard,
);
}
```
### 分析配置
```dart
class AnalyticsConfig {
final bool enableBehaviorAnalysis;
final bool enablePathAnalysis;
final bool enableConversionTracking;
final Duration analysisInterval;
final int maxPathLength;
final List<String> conversionGoals;
final Map<String, double> eventWeights;
static const AnalyticsConfig defaultAnalyticsConfig = AnalyticsConfig(
enableBehaviorAnalysis: true,
enablePathAnalysis: true,
enableConversionTracking: true,
analysisInterval: Duration(hours: 1),
maxPathLength: 50,
conversionGoals: ['purchase', 'registration', 'subscription'],
eventWeights: {
'click': 1.0,
'view': 0.5,
'search': 1.5,
'purchase': 5.0,
},
);
}
```
## 使用示例
### 基本事件跟踪
```dart
// 初始化触点服务
final touchPointService = TouchPointCollector.instance;
await touchPointService.initialize(TouchPointConfig.defaultConfig);
// 跟踪页面访问
await touchPointService.trackPageView(
PageViewEvent(
userId: 'user123',
sessionId: 'session456',
pageUrl: '/home',
pageName: '首页',
timestamp: DateTime.now(),
properties: {
'source': 'direct',
'previous_page': '/login',
},
),
);
// 跟踪用户行为
await touchPointService.trackEvent(
TouchPointEvent(
userId: 'user123',
sessionId: 'session456',
type: EventType.click,
category: 'navigation',
action: 'menu_click',
target: 'vehicle_menu',
properties: {
'menu_position': 'top',
'menu_index': 2,
},
timestamp: DateTime.now(),
pageUrl: '/home',
),
);
```
### 用户路径跟踪
```dart
// 开始用户路径跟踪
final pathTracker = UserPathTracker.instance;
final sessionId = await pathTracker.startPathTracking('user123');
// 记录路径节点
await pathTracker.recordPathNode(
sessionId,
PathNode(
id: 'node1',
pageUrl: '/vehicle/list',
pageName: '车辆列表',
entryTime: DateTime.now(),
pageData: {
'filter': 'electric',
'sort': 'price',
},
),
);
// 记录页面内的事件
await pathTracker.recordPathNode(
sessionId,
PathNode(
id: 'node2',
pageUrl: '/vehicle/detail/123',
pageName: '车辆详情',
entryTime: DateTime.now(),
events: [
TouchPointEvent(
type: EventType.view,
action: 'image_view',
target: 'vehicle_gallery',
),
],
),
);
// 结束路径跟踪
final userPath = await pathTracker.endPathTracking(sessionId);
print('用户路径总时长: ${userPath.totalDuration}');
```
### 用户行为分析
```dart
// 分析用户行为模式
final analyzer = TouchPointEventAnalyzer.instance;
final behaviorPattern = await analyzer.analyzeUserBehavior(
'user123',
TimeRange.lastMonth,
);
print('用户参与度评分: ${behaviorPattern.engagementScore}');
print('常访问页面: ${behaviorPattern.frequentPages}');
print('偏好功能: ${behaviorPattern.preferredFeatures}');
// 生成用户旅程
final userJourney = await analyzer.generateUserJourney('user123', 'session456');
print('旅程步骤数: ${userJourney.steps.length}');
// 计算转化率
final conversionFunnel = ConversionFunnel(
name: '购车转化漏斗',
steps: [
FunnelStep(name: '浏览车辆', event: 'vehicle_view'),
FunnelStep(name: '查看详情', event: 'vehicle_detail'),
FunnelStep(name: '预约试驾', event: 'test_drive_booking'),
FunnelStep(name: '下单购买', event: 'purchase'),
],
);
final conversionRate = await analyzer.calculateConversionRate(conversionFunnel);
print('总体转化率: ${conversionRate.overallConversionRate}%');
```
### 数据导出和管理
```dart
// 查询触点数据
final dataManager = TouchPointDataManager.instance;
final touchPointData = await dataManager.queryTouchPointData(
DataQuery(
userId: 'user123',
timeRange: TimeRange.lastWeek,
eventTypes: [EventType.click, EventType.view],
),
);
print('查询到 ${touchPointData.length} 条数据');
// 导出数据
final exportPath = await dataManager.exportData(
ExportConfig(
format: ExportFormat.csv,
timeRange: TimeRange.lastMonth,
includePersonalData: false,
),
);
print('数据已导出到: $exportPath');
// 清理过期数据
final cleanedCount = await dataManager.cleanupExpiredData(
Duration(days: 90),
);
print('清理了 $cleanedCount 条过期数据');
```
## 测试策略
### 单元测试
```dart
group('TouchPointCollector Tests', () {
test('should track event successfully', () async {
// Given
final collector = TouchPointCollector();
final event = TouchPointEvent(
userId: 'test_user',
type: EventType.click,
action: 'button_click',
);
// When
await collector.trackEvent(event);
// Then
final storedEvents = await collector.getStoredEvents();
expect(storedEvents, contains(event));
});
test('should analyze user behavior correctly', () async {
// Given
final analyzer = TouchPointEventAnalyzer();
final userId = 'test_user';
// When
final pattern = await analyzer.analyzeUserBehavior(userId, TimeRange.lastWeek);
// Then
expect(pattern.userId, userId);
expect(pattern.engagementScore, greaterThan(0));
});
});
```
### 集成测试
```dart
group('TouchPoint Integration Tests', () {
testWidgets('complete tracking flow', (tester) async {
// 1. 初始化触点服务
await TouchPointCollector.instance.initialize(TouchPointConfig.defaultConfig);
// 2. 模拟用户操作
await tester.tap(find.byKey(Key('vehicle_button')));
await tester.pumpAndSettle();
// 3. 验证事件被跟踪
final trackedEvents = await TouchPointCollector.instance.getStoredEvents();
expect(trackedEvents, isNotEmpty);
// 4. 验证用户路径记录
final userPaths = await UserPathTracker.instance.getUserPathHistory('test_user', 10);
expect(userPaths, isNotEmpty);
});
});
```
## 性能优化
### 数据收集优化
- **批量上传**:批量上传触点数据减少网络请求
- **数据压缩**:压缩数据减少存储空间和传输量
- **异步处理**:异步处理数据收集和上传
- **本地缓存**:本地缓存数据防止数据丢失
### 分析性能优化
- **增量分析**:只分析新增的数据
- **并行处理**:并行处理多个分析任务
- **结果缓存**:缓存分析结果避免重复计算
- **数据预聚合**:预聚合常用的分析指标
## 隐私和合规
### 数据隐私保护
- **数据匿名化**:敏感数据匿名化处理
- **用户同意管理**:用户数据收集同意管理
- **数据加密**:敏感数据加密存储和传输
- **访问控制**:严格的数据访问权限控制
### 合规要求
- **GDPR合规**支持GDPR数据保护要求
- **数据删除权**:支持用户数据删除请求
- **数据导出权**:支持用户数据导出请求
- **透明度报告**:提供数据使用透明度报告
## 版本历史
### v0.3.2+8 (当前版本)
- 新增实时行为分析功能
- 优化数据收集性能
- 支持用户路径可视化
- 修复数据同步问题
### v0.3.1
- 支持转化漏斗分析
- 新增异常行为检测
- 优化数据存储结构
- 改进隐私保护机制
## 依赖关系
### 内部依赖
- `basic_storage`: 本地数据存储
- `basic_network`: 网络请求服务
- `basic_logger`: 日志记录服务
- `basic_utils`: 工具类库
### 外部依赖
- `sqflite`: 本地数据库
- `dio`: HTTP客户端
- `uuid`: 唯一标识符生成
- `path_provider`: 文件路径管理
## 总结
`oneapp_touch_point` 模块为 OneApp 提供了完整的用户触点管理和分析能力。通过全面的数据收集、智能的行为分析和详细的路径跟踪,该模块帮助产品团队深入了解用户行为,优化用户体验,提升产品价值。同时,模块严格遵循隐私保护原则,确保用户数据的安全和合规使用。