JXAnalytics.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. //
  2. // JXAnalytics.h
  3. // AICity
  4. //
  5. // Feature: 003-ios-api-https
  6. // Task: T062 - iOS数据上报客户端
  7. // Created on 2025-10-14.
  8. //
  9. #import <Foundation/Foundation.h>
  10. NS_ASSUME_NONNULL_BEGIN
  11. /**
  12. * 设备信息
  13. */
  14. @interface JXDeviceInfo : NSObject
  15. @property (nonatomic, strong) NSString *deviceType;
  16. @property (nonatomic, strong) NSString *deviceModel;
  17. @property (nonatomic, strong) NSString *osVersion;
  18. @property (nonatomic, strong) NSString *appVersion;
  19. @end
  20. /**
  21. * 分析事件
  22. */
  23. @interface JXAnalyticsEvent : NSObject
  24. @property (nonatomic, strong) NSString *eventType;
  25. @property (nonatomic, strong) NSString *dramaId;
  26. @property (nonatomic, strong) NSString *episodeId;
  27. @property (nonatomic, assign) NSInteger playDuration;
  28. @property (nonatomic, assign) BOOL isCompleted;
  29. @property (nonatomic, assign) BOOL isMember;
  30. @property (nonatomic, strong) JXDeviceInfo *deviceInfo;
  31. @property (nonatomic, assign) NSTimeInterval timestamp;
  32. @property (nonatomic, assign) NSInteger retryCount;
  33. @end
  34. /**
  35. * 上报状态
  36. */
  37. typedef NS_ENUM(NSInteger, JXReportingStatus) {
  38. JXReportingStatusIdle,
  39. JXReportingStatusReporting,
  40. JXReportingStatusSuccess,
  41. JXReportingStatusError
  42. };
  43. /**
  44. * 队列状态
  45. */
  46. @interface JXQueueStatus : NSObject
  47. @property (nonatomic, assign) NSInteger queueSize;
  48. @property (nonatomic, assign) NSInteger maxQueueSize;
  49. @property (nonatomic, assign) JXReportingStatus reportingStatus;
  50. @property (nonatomic, strong, nullable) NSString *errorMessage;
  51. @property (nonatomic, assign) NSInteger lastSuccessCount;
  52. - (BOOL)isQueueFull;
  53. - (NSInteger)queueUsagePercent;
  54. @end
  55. /**
  56. * 剧星数据上报客户端
  57. *
  58. * 功能:
  59. * - 播放事件收集和上报
  60. * - 本地队列缓存
  61. * - 批量上报优化
  62. * - 网络状态感知
  63. */
  64. @interface JXAnalytics : NSObject
  65. /**
  66. * 单例实例
  67. */
  68. + (instancetype)sharedAnalytics;
  69. /**
  70. * 当前上报状态
  71. */
  72. @property (nonatomic, assign, readonly) JXReportingStatus reportingStatus;
  73. /**
  74. * 上报播放开始事件
  75. * @param dramaId 剧ID
  76. * @param episodeId 剧集ID
  77. */
  78. - (void)reportPlayStartWithDramaId:(NSString *)dramaId episodeId:(NSString *)episodeId;
  79. /**
  80. * 上报播放进度事件
  81. * @param dramaId 剧ID
  82. * @param episodeId 剧集ID
  83. * @param playDuration 播放时长(秒)
  84. */
  85. - (void)reportPlayProgressWithDramaId:(NSString *)dramaId
  86. episodeId:(NSString *)episodeId
  87. playDuration:(NSInteger)playDuration;
  88. /**
  89. * 上报播放完成事件
  90. * @param dramaId 剧ID
  91. * @param episodeId 剧集ID
  92. * @param playDuration 播放时长(秒)
  93. * @param isMember 是否为会员
  94. */
  95. - (void)reportPlayCompleteWithDramaId:(NSString *)dramaId
  96. episodeId:(NSString *)episodeId
  97. playDuration:(NSInteger)playDuration
  98. isMember:(BOOL)isMember;
  99. /**
  100. * 上报用户行为事件
  101. * @param dramaId 剧ID
  102. * @param episodeId 剧集ID
  103. * @param actionType 行为类型
  104. */
  105. - (void)reportUserActionWithDramaId:(NSString *)dramaId
  106. episodeId:(NSString *)episodeId
  107. actionType:(NSString *)actionType;
  108. /**
  109. * 上报点赞事件
  110. * @param dramaId 剧ID
  111. * @param episodeId 剧集ID
  112. */
  113. - (void)reportLikeWithDramaId:(NSString *)dramaId episodeId:(NSString *)episodeId;
  114. /**
  115. * 上报收藏事件
  116. * @param dramaId 剧ID
  117. * @param episodeId 剧集ID
  118. */
  119. - (void)reportFavoriteWithDramaId:(NSString *)dramaId episodeId:(NSString *)episodeId;
  120. /**
  121. * 上报分享事件
  122. * @param dramaId 剧ID
  123. * @param episodeId 剧集ID
  124. * @param shareType 分享类型
  125. */
  126. - (void)reportShareWithDramaId:(NSString *)dramaId
  127. episodeId:(NSString *)episodeId
  128. shareType:(NSString *)shareType;
  129. /**
  130. * 上报关注事件
  131. * @param dramaId 剧ID
  132. */
  133. - (void)reportFollowWithDramaId:(NSString *)dramaId;
  134. /**
  135. * 上报评论事件
  136. * @param dramaId 剧ID
  137. * @param episodeId 剧集ID
  138. */
  139. - (void)reportCommentWithDramaId:(NSString *)dramaId episodeId:(NSString *)episodeId;
  140. /**
  141. * 立即上报所有事件
  142. */
  143. - (void)flushEvents;
  144. /**
  145. * 获取队列状态
  146. * @return 队列状态信息
  147. */
  148. - (JXQueueStatus *)getQueueStatus;
  149. /**
  150. * 清空队列
  151. */
  152. - (void)clearQueue;
  153. /**
  154. * 添加状态变更监听
  155. * @param observer 观察者
  156. * @param selector 回调方法
  157. */
  158. - (void)addStatusObserver:(id)observer selector:(SEL)selector;
  159. /**
  160. * 移除状态变更监听
  161. * @param observer 观察者
  162. */
  163. - (void)removeStatusObserver:(id)observer;
  164. @end
  165. NS_ASSUME_NONNULL_END