删除埋点,im和客服

This commit is contained in:
谢宇宁
2026-10-08 20:10:40 +07:00
parent 92816047c6
commit 5064de7399
133 changed files with 220 additions and 1405 deletions
@@ -1,4 +1,3 @@
import 'package:analytics_sdk/enum/video_event_enum.dart';
import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -17,7 +16,6 @@ import 'package:video_player/video_player.dart';
import '../../../hj_model/acg/comic_chapters_model.dart';
import '../../../hj_model/cartoon_media_info.dart';
import '../../../track_event_manager/track_manager.dart';
import '../../../alert/video/share_media_dialog.dart';
import '../../cartoon/cartoon_recommend_page.dart';
import 'cartoon_episode_menu_alert.dart';
@@ -103,8 +101,6 @@ class _VideoDetailCartoonViewState extends State<VideoDetailCartoonView>
child: AdsGridView(
6,
padding: EdgeInsets.only(left: 12, bottom: 18),
exposureModel:
AdExposureModel(pageType: TrackEventPageType.videoPlay),
),
),
SliverToBoxAdapter(child: _buildTitleMenu()),
@@ -143,9 +139,8 @@ class _VideoDetailCartoonViewState extends State<VideoDetailCartoonView>
);
}
/// 分享:带播放器上报埋点(进度/时长),再弹分享面板
/// 分享:弹分享面板
void _onShare() {
TrackVideoManager.send(VideoEventEnum.VIDEO_SHARE, videoModel, widget.playCtr);
Get.dialog(ShareMediaDialog(videoModel: videoModel));
}
+1 -17
View File
@@ -1,6 +1,5 @@
import 'dart:async';
import 'package:analytics_sdk/enum/video_event_enum.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
@@ -38,7 +37,6 @@ import '../../tools_base/debug_log.dart';
import '../../tools_base/event_bus/event_bus_util.dart';
import '../../tools_base/event_bus/events.dart';
import '../../tools_base/global_store/store.dart';
import '../../track_event_manager/track_manager.dart';
import '../main_page/provider/msg_provider.dart';
import '../pre_sale/pre_sale_provider.dart';
@@ -342,7 +340,6 @@ class VideoLogic extends GetxController with GetSingleTickerProviderStateMixin {
/// 注:贴片广告期间不直接 play,由广告结束回调触发本方法(见 video_page.dart 的 onFinish)
void play() {
if (isDispose || isShowAd) return; // 有贴片广告时不自动播,等广告结束回调
TrackVideoManager.send(VideoEventEnum.VIDEO_PLAY, videoModel, playerCtr, isPreVideo: _isPreview());
playerCtr?.play();
_startPayGuideTimer(); // 需付费的起播满3秒 → 前置购买引导(场景1);不满足条件的它自己会挡
}
@@ -399,7 +396,6 @@ class VideoLogic extends GetxController with GetSingleTickerProviderStateMixin {
try {
await playerCtr?.initialize();
if (isRetry) confirmPlatformView(); // 仅重试成功(同视频 textureView 挂、platformView 放出)才落本地
TrackVideoManager.send(VideoEventEnum.VIDEO_VIEW, videoModel, playerCtr, isPreVideo: _isPreview());
update();
} catch (e) {
debugLog("视频初始化失败:$e play url = $videoUrl");
@@ -469,9 +465,6 @@ class VideoLogic extends GetxController with GetSingleTickerProviderStateMixin {
return;
}
int duration = playerCtr?.value.duration.inSeconds ?? 0;
if (duration > 0 && playerCtr!.value.position.inSeconds >= duration - 1) {
_trackComplete();
}
if (_hasFreeWatchRight) return; // 免费次数/免费区/动漫已购/免费章节/VIP金币限免,整片随便看
if (!_isPreview()) {
//每帧都走这里,videoStatus 是重算 getter,只读一次
@@ -572,15 +565,9 @@ class VideoLogic extends GetxController with GetSingleTickerProviderStateMixin {
return videoModel?.previewURL?.isNotEmpty == true && videoStatus.isNeedPay;
}
/// 上报当前视频播放结束(切视频/切集/退页统一入口)
void _trackComplete() {
TrackVideoManager.send(VideoEventEnum.VIDEO_COMPLETE, videoModel, playerCtr, isPreVideo: _isPreview());
}
/// 推荐区切内容(释放控制器 + 重拉详情起播,不开新页)。
/// **必须按被点内容的 videoType 定接口**,用页面入参会串接口 → 「视频资源加载失败」
Future<void> switchVideo(VideoModel model) async {
_trackComplete();
videoModel = model;
isShowBuy.value = false;
isCartoon = model.videoType == 1;
@@ -601,7 +588,6 @@ class VideoLogic extends GetxController with GetSingleTickerProviderStateMixin {
/// 切视频或切 CDN 路线:[model] 非空=切新视频,为空=同视频换 URL;控制器为空走首次进入路径
Future<void> startPlay({VideoModel? model, bool resetPos = false}) async {
if (model != null) {
_trackComplete();
videoModel = model;
}
if (playerCtr == null) {
@@ -619,7 +605,6 @@ class VideoLogic extends GetxController with GetSingleTickerProviderStateMixin {
return;
}
try {
_trackComplete();
currentEpisode = episode;
isShowBuy.value = false;
releasePlayer(rebuild: false);
@@ -653,13 +638,12 @@ class VideoLogic extends GetxController with GetSingleTickerProviderStateMixin {
playerCtr = null;
}
/// 页面销毁清理:上报 VIDEO_COMPLETE → 取消事件订阅 → 非预览视频上报观看记录 → 释放播放器
/// 页面销毁清理:取消事件订阅 → 非预览视频上报观看记录 → 释放播放器
@override
void onClose() {
isDispose = true; // 第一时间置位,让所有异步回调(initialize/postFrame/Future.delayed)能尽早 return
TimedPopupManager().cancel(TimedPopupType.freeWatchPay);
TimedPopupManager().cancel(TimedPopupType.videoPayAhead);
_trackComplete();
playerCtr?.pause();
playerCtr?.removeListener(_onProgress);
@@ -7,7 +7,6 @@ import 'package:jydj/assets_tool/images.dart';
import '../../../hj_model/splash/ads_model.dart';
import '../../../tools_base/banner/ads_banner.dart';
import '../../../tools_base/global_store/store.dart';
import '../../../track_event_manager/track_manager.dart';
/// 播放前贴片广告(Banner + 倒计时关闭)。
/// 倒计时完或 VIP 关闭走 [onFinish],未到时间的非 VIP 走 [onToVip] 引导开通
@@ -91,7 +90,6 @@ class _VideoAdWidgetState extends State<VideoAdWidget> {
height: 88,
autoPlayMs: 2000,
indicatorAlign: IndicatorAlign.bottomCenter,
exposureModel: AdExposureModel(pageType: TrackEventPageType.videoPlay, adType: AdType.smallBanner),
),
_closeBtn(),
if (widget.showBackArrow) _backBtn(),
@@ -1,4 +1,3 @@
import 'package:analytics_sdk/enum/video_event_enum.dart';
import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -17,7 +16,6 @@ import 'package:video_player/video_player.dart';
import '../../../alert/video/share_media_dialog.dart';
import '../../../routers/jump_router.dart';
import '../../../track_event_manager/track_manager.dart';
import '../../cartoon/cartoon_recommend_page.dart';
/// 视频播放页数据详情
@@ -83,7 +81,6 @@ class _VideoDetailViewState extends State<VideoDetailView> with SingleTickerProv
6,
padding: EdgeInsets.only(left: 12, bottom: 18),
autoStyle: true,
exposureModel: AdExposureModel(pageType: TrackEventPageType.videoPlay),
),
),
SliverToBoxAdapter(child: _buildTitleMenu()),
@@ -209,9 +206,8 @@ class _VideoDetailViewState extends State<VideoDetailView> with SingleTickerProv
);
}
/// 分享:带播放器上报埋点(进度/时长),再弹分享面板
/// 分享:弹分享面板
void _onShare() {
TrackVideoManager.send(VideoEventEnum.VIDEO_SHARE, videoModel, widget.playCtr);
Get.dialog(ShareMediaDialog(videoModel: videoModel));
}
@@ -1,7 +1,6 @@
import 'dart:async';
import 'dart:ui' show ImageFilter;
import 'package:analytics_sdk/enum/video_event_enum.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
@@ -16,7 +15,6 @@ import '../../../hj_utils/buy_util.dart';
import '../../../hj_utils/date_time_util.dart';
import '../../../hj_utils/free_play_manager.dart';
import '../../../tools_base/global_store/store.dart';
import '../../../track_event_manager/track_manager.dart';
import '../../pre_sale/pre_sale_provider.dart';
import '../../short_video/view/video_progress_widget.dart';
import 'long_video_status.dart';
@@ -196,8 +194,6 @@ class _VideoMenuViewState extends State<VideoMenuView> {
void _setPlay(bool play) {
_playing.value = play;
TrackVideoManager.send(play ? VideoEventEnum.VIDEO_PLAY : VideoEventEnum.VIDEO_PAUSE, widget.videoModel, playCtr,
isPreVideo: isPreview);
play ? playCtr.play() : playCtr.pause();
}
@@ -219,8 +215,6 @@ class _VideoMenuViewState extends State<VideoMenuView> {
const step = Duration(seconds: 10);
final pos = playCtr.value.position;
playCtr.seekTo(_snapSeek(forward ? pos + step : pos - step));
TrackVideoManager.send(forward ? VideoEventEnum.VIDEO_FORWARD : VideoEventEnum.VIDEO_REWIND, widget.videoModel, playCtr,
isPreVideo: isPreview);
}
void _onPlayerTick() {
@@ -282,7 +276,6 @@ class _VideoMenuViewState extends State<VideoMenuView> {
},
onLongPressStart: (_) {
showToast("长按不动,2X倍速播放", gravity: ToastGravity.top);
TrackVideoManager.send(VideoEventEnum.VIDEO_FORWARD, widget.videoModel, playCtr, isPreVideo: isPreview);
_isLongPress = true;
_showSpeed = false;
_showSeekText = false;