当前位置: 首页 > article >正文

8.5 用户行为分析与埋点

数据驱动产品迭代。通过埋点收集用户行为数据结合 Firebase Analytics 或自研统计平台分析用户路径、转化漏斗和功能使用情况。一、Firebase Analyticsdependencies:firebase_core:^2.30.0firebase_analytics:^10.10.01.1 基础事件上报importpackage:firebase_analytics/firebase_analytics.dart;classAnalyticsService{staticfinal_analyticsFirebaseAnalytics.instance;// 设置用户属性staticFuturevoidsetUser(StringuserId,{String?userType})async{await_analytics.setUserId(id:userId);if(userType!null){await_analytics.setUserProperty(name:user_type,value:userType);}}// 页面浏览staticFuturevoidlogPageView(StringpageName)async{await_analytics.logScreenView(screenName:pageName);}// 用户注册staticFuturevoidlogSignUp(Stringmethod)async{await_analytics.logSignUp(signUpMethod:method);}// 用户登录staticFuturevoidlogLogin(Stringmethod)async{await_analytics.logLogin(loginMethod:method);}// 搜索staticFuturevoidlogSearch(Stringquery)async{await_analytics.logSearch(searchTerm:query);}// 查看商品staticFuturevoidlogViewItem(Productproduct)async{await_analytics.logViewItem(currency:CNY,value:product.price,items:[AnalyticsEventItem(itemId:product.id.toString(),itemName:product.name,itemCategory:product.category,price:product.price,),],);}// 加入购物车staticFuturevoidlogAddToCart(Productproduct,int quantity)async{await_analytics.logAddToCart(currency:CNY,value:product.price*quantity,items:[AnalyticsEventItem(itemId:product.id.toString(),itemName:product.name,price:product.price,quantity:quantity,),],);}// 下单电商转化漏斗staticFuturevoidlogPurchase({requiredStringorderId,required double totalAmount,requiredListProductproducts,})async{await_analytics.logPurchase(transactionId:orderId,currency:CNY,value:totalAmount,items:products.map((p)AnalyticsEventItem(itemId:p.id.toString(),itemName:p.name,price:p.price,)).toList(),);}// 自定义事件staticFuturevoidlogCustomEvent(StringeventName,{MapString,Object?parameters,})async{await_analytics.logEvent(name:eventName,parameters:parameters);}}1.2 路由自动统计GoRouterclassAnalyticsRouteObserverextendsNavigatorObserver{overridevoiddidPush(Routeroute,Route?previousRoute){super.didPush(route,previousRoute);_logPageView(route);}overridevoiddidPop(Routeroute,Route?previousRoute){super.didPop(route,previousRoute);if(previousRoute!null)_logPageView(previousRoute);}overridevoiddidReplace({Route?newRoute,Route?oldRoute}){super.didReplace(newRoute:newRoute,oldRoute:oldRoute);if(newRoute!null)_logPageView(newRoute);}void_logPageView(Routeroute){finalnameroute.settings.name??route.runtimeType.toString();AnalyticsService.logPageView(name);}}// 注册到 MaterialApp / GoRouterMaterialApp.router(routerConfig:router,navigatorObservers:[AnalyticsRouteObserver()],)二、自研埋点系统2.1 统一埋点接口// 埋点事件模型classTrackEvent{finalStringeventName;// 事件名finalString?pageName;// 来源页面finalMapString,dynamicproperties;// 附加属性finalDateTimetimestamp;TrackEvent({requiredthis.eventName,this.pageName,this.propertiesconst{},DateTime?timestamp,}):timestamptimestamp??DateTime.now();MapString,dynamictoJson(){event:eventName,page:pageName,properties:properties,timestamp:timestamp.toIso8601String(),app_version:AppInfo.version,platform:Platform.operatingSystem,device_id:DeviceInfo.deviceId,};}// 埋点 SDKclassTracker{staticfinal_queueTrackEvent[];staticTimer?_flushTimer;staticconst_batchSize20;staticconst_flushIntervalDuration(seconds:10);staticvoidinit(){// 定时刷新批量上报_flushTimerTimer.periodic(_flushInterval,(_)_flush());}// 埋点入口staticvoidtrack(StringeventName,{String?page,MapString,dynamic?properties,}){finaleventTrackEvent(eventName:eventName,pageName:page,properties:properties??{},);_queue.add(event);// 达到批量大小立即上报if(_queue.length_batchSize)_flush();}staticFuturevoid_flush()async{if(_queue.isEmpty)return;finaleventsListTrackEvent.from(_queue);_queue.clear();try{awaitAnalyticsApi.batchReport(events.map((e)e.toJson()).toList(),);}catch(_){// 上报失败重新入队下次重试_queue.insertAll(0,events);}}staticvoiddispose(){_flushTimer?.cancel();_flush();// App 关闭前立即上报}}2.2 声明式埋点装饰器模式// 自动曝光埋点 Widget进入视口时上报classTrackExposureextendsStatefulWidget{finalStringeventName;finalMapString,dynamic?properties;finalWidgetchild;constTrackExposure({super.key,requiredthis.eventName,this.properties,requiredthis.child,});overrideStateTrackExposurecreateState()_TrackExposureState();}class_TrackExposureStateextendsStateTrackExposure{bool _hasTrackedfalse;overrideWidgetbuild(BuildContextcontext){returnVisibilityDetector(key:Key(track_${widget.eventName}),onVisibilityChanged:(info){if(info.visibleFraction0.5!_hasTracked){_hasTrackedtrue;Tracker.track(widget.eventName,properties:widget.properties);}},child:widget.child,);}}// 点击埋点 Widget代理点击事件classTrackTapextendsStatelessWidget{finalStringeventName;finalMapString,dynamic?properties;finalWidgetchild;finalVoidCallback?onTap;constTrackTap({super.key,requiredthis.eventName,this.properties,requiredthis.child,this.onTap,});overrideWidgetbuild(BuildContextcontext){returnGestureDetector(onTap:(){Tracker.track(eventName,properties:properties);onTap?.call();},child:child,);}}// 使用TrackTap(eventName:click_add_to_cart,properties:{product_id:product.id,price:product.price},onTap:_addToCart,child:ElevatedButton(onPressed:null,child:constText(加入购物车)),)TrackExposure(eventName:view_product_card,properties:{product_id:product.id},child:ProductCard(product:product),)三、崩溃与性能监控// Crashlytics 崩溃上报配合 Firebaseimportpackage:firebase_crashlytics/firebase_crashlytics.dart;voidmain()async{WidgetsFlutterBinding.ensureInitialized();awaitFirebase.initializeApp();// 捕获 Flutter 框架错误FlutterError.onErrorFirebaseCrashlytics.instance.recordFlutterFatalError;// 捕获异步错误Dart ZoneawaitrunZonedGuarded(()async{runApp(constMyApp());},(error,stackTrace){FirebaseCrashlytics.instance.recordError(error,stackTrace,fatal:true);},);}// 手动上报非致命错误try{awaitriskyOperation();}catch(e,stackTrace){FirebaseCrashlytics.instance.recordError(e,stackTrace,fatal:false);}// 添加自定义日志崩溃前的上下文FirebaseCrashlytics.instance.log(用户点击了结算按钮);FirebaseCrashlytics.instance.setCustomKey(orderId,currentOrderId);FirebaseCrashlytics.instance.setCustomKey(userId,currentUserId);小结功能方案页面统计Firebase Analytics NavigatorObserver电商漏斗logViewItem → logAddToCart → logPurchase自定义埋点自研 Tracker批量队列上报声明式埋点TrackTap / TrackExposure 装饰器崩溃监控Firebase Crashlytics性能监控Firebase Performance 下一节继续阅读后续章节

相关文章:

8.5 用户行为分析与埋点

数据驱动产品迭代。通过埋点收集用户行为数据,结合 Firebase Analytics 或自研统计平台,分析用户路径、转化漏斗和功能使用情况。一、Firebase Analytics dependencies:firebase_core: ^2.30.0firebase_analytics: ^10.10.01.1 基础事件上报 import pack…...

Qwen3.5-2B企业知识库接入:PDF文档切片→向量化→图文混合检索实战教程

Qwen3.5-2B企业知识库接入:PDF文档切片→向量化→图文混合检索实战教程 1. 引言:为什么选择Qwen3.5-2B构建企业知识库 在当今企业数字化转型浪潮中,高效的知识管理成为核心竞争力。传统知识库面临三大痛点: 检索效率低&#xf…...

ComfyUI-Manager依赖管理架构深度解析:从传统pip到现代uv的技术演进之路

ComfyUI-Manager依赖管理架构深度解析:从传统pip到现代uv的技术演进之路 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and ena…...

Pixel Dream Workshop效果展示:高对比度色彩优化后像素图视觉冲击力分析

Pixel Dream Workshop效果展示:高对比度色彩优化后像素图视觉冲击力分析 1. 像素艺术的新纪元 Pixel Dream Workshop(像素幻梦创意工坊)代表了当前像素艺术生成技术的最前沿。这款基于FLUX.1-dev扩散模型构建的创作工具,彻底改变…...

8.4 启动优化与闪屏

App 冷启动速度直接影响用户留存。Flutter 项目的启动优化涉及原生闪屏配置、Dart 代码初始化策略和渲染首帧时间缩短。一、Native Splash Screen 1.1 flutter_native_splash(推荐) dependencies:flutter_native_splash: ^2.4.0# pubspec.yaml 或 flutte…...

告别Qt调试器报错:一份详细的CDB配置避坑指南与原理浅析

告别Qt调试器报错:一份详细的CDB配置避坑指南与原理浅析 调试是开发过程中不可或缺的一环,但当你在Qt Creator中满怀期待地按下调试按钮,却看到"Unable to create a debugging engine"这样的错误提示时,那种挫败感可想而…...

仿真学习系列(五十一):ADS仿真理解电容特性

前言 在高速电路与电源完整性(PI/PDN)设计中,电容几乎无处不在:去耦、旁路、滤波、储能…… 但在很多实际项目里,电容的使用仍停留在“并几个、换大点”的经验层面,一旦频率上来,就会出现仿真看着没问题、实物却不稳定的情况。根本原因在于:我们往往把电容当成了理想…...

Meta 打造 AI 版扎克伯格与员工交流,扎克伯格亲力亲为 AI 项目,股价涨 7%

Meta 正打造人工智能版马克扎克伯格用于和员工交流,该工作处于早期阶段。同时,扎克伯格在人工智能发展上亲力亲为,Meta 发布新模型后股价上涨 7%。打造 AI 版扎克伯格作为重塑公司为人工智能核心的一部分,Meta 正在打造人工智能版…...

从非隔离LED驱动器到SELV:为何你的照明设备需要这道“安全锁”?

1. 当LED灯条亮起时,你触摸到的可能是100多伏电压 去年装修新房时,我差点被客厅的LED灯带"咬"了一口。当时灯带接口处有些松动,我下意识伸手去调整,指尖突然传来一阵刺痛——后来用万用表测量才发现,这条标榜…...

微软在 Windows 手持设备 Xbox 模式测试虚拟鼠标光标,无需第三方软件轻松激活!

微软自研虚拟鼠标光标,提升手持设备操作体验 微软开始在基于 Windows 的手持设备的 Xbox 模式中测试自研的虚拟鼠标光标——“游戏手柄光标”(Gamepad Cursor)。该功能可将 Xbox Ally X 这类手持设备的左摇杆转变为虚拟鼠标,为用户…...

Dify+OpenAI+XInference三件套配置指南:从模型部署到API调用全流程

DifyOpenAIXInference三件套配置指南:从模型部署到API调用全流程 在AI应用开发领域,如何高效整合多个模型服务并构建稳定可靠的工作流,一直是开发者面临的挑战。本文将深入探讨基于Dify平台,结合OpenAI的通用语言模型与XInference…...

QEMU 8.0.2源码编译踩坑实录:从依赖缺失到静态编译的完整解决方案

QEMU 8.0.2源码编译实战指南:从环境搭建到静态编译的深度解析 在虚拟化技术领域,QEMU作为开源的硬件模拟器,一直是开发者进行跨平台开发和测试的重要工具。手动编译QEMU源码不仅能获得最新功能,还能针对特定需求进行定制化配置。…...

Windows Defender终极移除指南:windows-defender-remover工具完整使用教程

Windows Defender终极移除指南:windows-defender-remover工具完整使用教程 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode…...

3步高效去除视频水印:LAMA模型智能批量处理终极指南

3步高效去除视频水印:LAMA模型智能批量处理终极指南 【免费下载链接】WatermarkRemover 批量去除视频中位置固定的水印 项目地址: https://gitcode.com/gh_mirrors/wa/WatermarkRemover 还在为视频中那些顽固的水印标识而烦恼吗?想要获得纯净的视…...

[FPGA]Spartan6 Uart固定波特率读写JY901P惯导模块

这版本是固定波特率,无法修改串口波特率,无法恢复出厂设置(出厂设置会更改波特率到9600,除非固定波特率一开始设置为9600,其他写命令都可以成功写入)。 1. JY901P交互协议 这个是JY901P惯导模块串口的交互…...

tiktok最新V2滑块验证分析 /captcha/verifyV2

经过好些天的努力,终于攻克了tiktokV2滑块,踩过不少坑,今天来总结一下.首先,通过/captcha/get获取验证信息,获取到的信息中,除了背景前景图片url外,challenge_id ,tip_y 这两个都是有用的.然后,我们来看看要提交给/captcha/verifyV2的数据:最主要的有reply,mm,mp,tmv,gy 这几个…...

2026年OpenClaw怎么集成?阿里云1分钟保姆级教程+大模型APIKey配置、Skill集成教程

2026年OpenClaw怎么集成?阿里云1分钟保姆级教程大模型APIKey配置、Skill集成教程。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服务启动…...

第5章,[标签 Win32] :GDI 的其他方面的分类

专栏导航 上一篇:第5章,[标签 Win32] :GDI 的基本图形 回到目录 下一篇:无 本节前言 对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点&…...

收藏!小白/程序员入行AI应用开发必看,别被招聘要求吓退(附实操资源)

如果你是程序员小白,或是想转型AI应用开发的从业者,听我一句劝——大胆投简历,别被招聘启事上的“精通大模型底层原理”“2年以上AI相关经验”吓住!很多时候,招聘要求写的只是企业的“理想画像”,我和身边不…...

第5章,[标签 Win32] :GDI 的基本图形

专栏导航 上一篇:第5章,[标签 Win32] :GDI 函数调用 回到目录 下一篇:第5章,[标签 Win32] :GDI 的其他方面的分类 本节前言 对于本节所讲解的知识,有可能,你会需要时不时地参考…...

Day05:C语言数组存储结构与字符串详解

一、数组的存储结构1. 数组变量的地址连续性数组中的元素在内存中地址是连续的。数组名非常重要,涉及指针与内存操作。2. 数组名的含义数组名表示首元素的地址。示例:int arr[5]; printf("%p\n", arr); // 输出首元素地址 printf("%p…...

pgRouting安装及使用示例

文章目录环境文档用途详细信息环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.5.10 文档用途 本文介绍pgRouting的安装及使用示例。 详细信息 简介 pgRouting是PostgreSQL下基于PostGIS的扩展插件,提供了地理空间路由和…...

day02统计师考试(初级)统计法的特点

统计法的特点 (一)调整对象具有特殊性和复杂性 1.调整对象的特殊性: 统计法以统计活动中形成的社会关系为调整对象。 2.调整对象的复杂性: ①调整的社会关系既有纵向的管理关系,也有横向的指导关系; ②既有…...

数据库无法连接情况排查

文章目录环境症状问题原因解决方案环境 系统平台:N/A 版本:9.0,6.0,4.5 症状 本文档用于提供HGDB数据库的常见无法连接问题的基本排查思路,建议按顺序排查; 若以上步骤未能排查出连接问题,建议联系瀚高厂家处理。 …...

一文讲透数字化转型的十个关键概念:信息化、自动化、数据化、智能化、平台化……

最近几年,提到数字化转型,总绕不开一堆带“化”的词:信息化、数据化、智能化、平台化等等。说实话,这些概念太多了,有时候连从业者都容易搞混。今天我就来给大家梳理一下电子化、信息化、结构化、多媒体化、自动化、网…...

开源TOP20项目(2026.04.01-2026.04.06)

排名项目名Star描述1luongnv89/claude-howto20.2kClaude Code 的可视化、示例驱动指南——从基本概念到高级代理,提供可立即产生价值的复制粘贴模板。从打字claude到编排代理、钩子、技能和 MCP 服务器——通过可视化教程、复制粘贴模板和引导式学习路径2NousResear…...

通义千问2.5-7B低成本上线:共享GPU资源部署案例

通义千问2.5-7B低成本上线:共享GPU资源部署案例 想体验最新最强的开源大模型,但被动辄几十GB的显存需求和昂贵的专业显卡劝退?这可能是很多开发者和创业团队面临的现实困境。今天,我们就来分享一个极具性价比的解决方案&#xff…...

反思学习!

前言之前挖的小程序,没找到漏洞,挖的web没找到漏洞,然后这次买了fofa会员,不买应该也能挖到这次的侧重点不一样了,以前学校的首页啊,什么学院啊,我都能看半天,看着看着就知道了&…...

从图像压缩到信道反馈:CsiNet如何重塑大规模MIMO的深度学习范式

1. 当无线通信遇上计算机视觉:CSI为何能被看作图像? 第一次听说把信道状态信息(CSI)当作图像处理时,我的反应和大多数通信工程师一样:"这脑洞开得有点大吧?"但当我真正动手复现CsiNet…...

20个核心AI概念轻松入门:收藏这份小白友好指南,开启大模型学习之旅!

如果你曾尝试学习AI,大概率至少有过一次这样的感受……“这到底在讲什么?” 术语太多。 工具太多。 网上所有人都说得好像理所当然。 学习AI很容易让人感到崩溃。 尤其如果你不是直接从事这一行,几乎像在学一门全新的语言。 但我逐渐意识到一…...