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

17 KiB
Raw Blame History

OneApp Touch Point - 触点服务主模块

模块概述

oneapp_touch_point 是 OneApp 的触点服务主模块,负责用户触点数据的收集、管理和分析。该模块通过跟踪用户在应用中的各种交互行为,构建完整的用户行为路径,为用户体验优化、个性化推荐和业务决策提供数据支撑。

核心功能

1. 用户触点数据收集

  • 行为事件跟踪:记录用户的点击、滑动、停留等行为
  • 页面访问跟踪:跟踪用户的页面访问路径和时长
  • 功能使用统计:统计各功能模块的使用频率
  • 异常行为监控:监控和记录异常的用户行为

2. 触点事件跟踪和分析

  • 事件分类管理:对触点事件进行分类和标签管理
  • 实时事件处理:实时处理和响应触点事件
  • 事件关联分析:分析事件之间的关联关系
  • 趋势分析:分析用户行为的趋势变化

3. 用户行为路径记录

  • 用户旅程映射:构建完整的用户旅程地图
  • 转化漏斗分析:分析用户在关键流程中的转化情况
  • 路径优化建议:基于数据分析提供路径优化建议
  • 异常路径识别:识别和分析异常的用户行为路径

技术架构

架构设计

┌─────────────────────────────────────┐
│            应用界面层                │
│         (Application UI)            │
├─────────────────────────────────────┤
│        OneApp Touch Point           │
│  ┌──────────┬──────────┬──────────┐ │
│  │ 数据收集 │ 事件处理 │ 行为分析 │ │
│  ├──────────┼──────────┼──────────┤ │
│  │ 路径跟踪 │ 数据存储 │ 报告生成 │ │
│  └──────────┴──────────┴──────────┘ │
├─────────────────────────────────────┤
│           数据处理层                │
│  ┌──────────┬──────────┬──────────┐ │
│  │ 数据清洗 │ 数据聚合 │ 数据分析 │ │
│  └──────────┴──────────┴──────────┘ │
├─────────────────────────────────────┤
│           数据存储层                │
│    (Local DB + Remote Analytics)    │
└─────────────────────────────────────┘

核心组件

1. 触点数据收集器 (TouchPointCollector)

class TouchPointCollector {
  // 记录触点事件
  Future<void> trackEvent(TouchPointEvent event);
  
  // 记录页面访问
  Future<void> trackPageView(PageViewEvent event);
  
  // 记录用户行为
  Future<void> trackUserAction(UserActionEvent event);
  
  // 批量上传数据
  Future<bool> uploadBatchData();
}

2. 事件分析器 (EventAnalyzer)

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)

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)

class TouchPointDataManager {
  // 存储触点数据
  Future<bool> storeTouchPointData(TouchPointData data);
  
  // 查询触点数据
  Future<List<TouchPointData>> queryTouchPointData(DataQuery query);
  
  // 清理过期数据
  Future<int> cleanupExpiredData(Duration retentionPeriod);
  
  // 导出数据
  Future<String> exportData(ExportConfig config);
}

数据模型

触点事件模型

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        // 自定义事件
}

用户路径模型

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;
}

用户行为分析模型

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 接口

数据收集接口

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);
}

数据分析接口

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();
}

数据管理接口

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);
}

配置管理

触点跟踪配置

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,
  );
}

分析配置

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,
    },
  );
}

使用示例

基本事件跟踪

// 初始化触点服务
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',
  ),
);

用户路径跟踪

// 开始用户路径跟踪
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}');

用户行为分析

// 分析用户行为模式
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}%');

数据导出和管理

// 查询触点数据
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 条过期数据');

测试策略

单元测试

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));
  });
});

集成测试

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 提供了完整的用户触点管理和分析能力。通过全面的数据收集、智能的行为分析和详细的路径跟踪,该模块帮助产品团队深入了解用户行为,优化用户体验,提升产品价值。同时,模块严格遵循隐私保护原则,确保用户数据的安全和合规使用。