开发谷歌插件之GA埋点

news2024/9/21 6:20:02

目录

一、背景

二、踩坑

三、谷歌插件开发的GA埋点的实现方式


一、背景

开发了一个谷歌插件,领导需要对用户的一些行为进行分析,于是让我在代码里面加上GA埋点。由于我们的PC端的项目一直都有进行GA埋点,当时就想着,这不就是把相关的代码搬过来就可以了吗。简单。于是说干就干,花了几分钟的pc端相关的GA埋点的代码搬了过来,代码如下:

  • 引入react-ga4的插件库
import ReactGA from 'react-ga4';

const initializeGA = () => {
  ReactGA.initialize(process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS as string);
};

const trackGAEvent = (
  category: string,
  action: string,
  label: string,
  value?: number
) => {
  // Send GA4 Event
  ReactGA.event({
    category: category,
    action: action,
    label: label,
    ...(typeof value === 'number' && value >= 0 && { value: value })
  });
};
  • 先在全局代码中初始化GA埋点的代码,然后在需要打点的事件上调用trackGAEvent事件

在service_worker文件里面监听onInstalled事件,然后进行全局初始化:

import {initializeGA} from '@/utils/ga';

chrome.runtime.onInstalled.addListener(function (details) {
  if (details.reason === "install") {
   initializeGA()
  }
});

然后在需要打点的事件上调用 trackGAEvent事件

import { initializeGA,trackGAEvent } from '@/utils/ga';


trackGAEvent('account.signin', 'signinBtn.click.email', '');
二、踩坑

代码写完后很自信的重新打了一个插件包给领导用,然后第二天反馈的是,在谷歌分析后台没有看到对应的打点事件,一开始怀疑是不是在service_worker里面初始化GA之后没有生效、是不是eventName太长等等,于是在每次埋点之前都进行初始化以及缩短eventName等等,发现都不行。于是我就重新看了一下谷歌插件开发的文档,才发现谷歌插件开的GA埋点是有属于的实现方式的,相关文档:https://developer.chrome.com/docs/extensions/how-to/integrate/google-analytics-4?hl=zh-cn

三、谷歌插件开发的GA埋点的实现方式

1、获取api_secret以及measurement_id

2、生成 client_id

client_id是特定设备/用户唯一的标识符,通过调用self.crypto.randomUUID()生成一个client_id 存储在 chrome.storage.local中,以确保其在安装扩展程序期间保持不变。

注意:使用chrome.storage.local,需要在manifest中配置storage 权限:

"permissions": ["storage"]
const getOrCreateClientId = async()=> {
    let { clientId } = await chrome.storage.local.get("clientId");
    if (!clientId) {
      // Generate a unique client ID, the actual value is not relevant
      clientId = self.crypto.randomUUID();
      await chrome.storage.local.set({ clientId });
    }
    return clientId;
  }

3、准备好api_secret、measurement_id以及client_id之后就可以进行分析事件的发送了

const GA_ENDPOINT = 'https://www.google-analytics.com/mp/collect';
const MEASUREMENT_ID = `G-...`;
const API_SECRET = `...`;

const fireEvent = ()=>{
 fetch(
      `${GA_ENDPOINT}?measurement_id=${MEASUREMENT_ID}&api_secret=${API_SECRET}`,
      {
        method: 'POST',
        body: JSON.stringify({
          client_id: await getOrCreateClientId(),
          events: [
            {
              name: 'button_clicked',
              params: {
                id: 'my-button',
              },
            },
          ],
        }),
      }
    );
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2151510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Cloud Alibaba-(4)Sentinel【流控和降级】

Spring Cloud Alibaba-(1)搭建项目环境 Spring Cloud Alibaba-(2)Nacos【服务注册与发现、配置管理】 Spring Cloud Alibaba-(3)OpenFeign【服务调用】 Spring Cloud Alibaba-(4)Sen…

界面控件Telerik UI for WinForms 2024 Q3概览 - 支持合并单元格等

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 本文将介绍界面组件Telerik UI for WinForms在今年第一…

Java语言程序设计基础篇_编程练习题***18.32 (游戏:骑士的旅途)

目录 题目:***18.32 (游戏:骑士的旅途) 习题思路 代码示例 输出结果 题目:***18.32 (游戏:骑士的旅途) 骑士的旅途是一个古老的谜题,它的目的是使骑从棋盘上的任意一个正方 形开始移动,经过其他的每个正方形一次,如…

R18 5G网络中 AI/ML技术特性及其在5GS和NG-RAN中的应用

随着5G技术的发展,人工智能(AI)和机器学习(ML)在网络中的应用越来越广泛。本文将介绍R18 5G网络中AI/ML的新特性,包括在5G系统(5GS)中的应用、在新一代无线接入网(NG-RAN…

AD中PCB元器件常用的对齐用法

1.shift 选中要对齐的元器件 2.按右键,选择对齐,或者按A,弹出对齐对菜单;(切记不要选择多余的元器件或者线条,要不然也会根据它的位置来做对齐,按shift一个一个元器件选择) 常用如下…

基于SpringBoot+Vue的在线学习平台

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

出现conda不是内部或外部命令,也不是可运行的程序或批处理文件。的解决办法

发现是我的环境变量不对,需要改成conda.exe所在的目录下 如果不知道自己conda.exe在哪的 可以下载个everything这个软件 找东西很快 找到后 点击环境变量-系统变量-Path-新建-(你的conda.exe所在目录:绝对路径) 完成上述操作…

【English】语法的整体结构

目录 📌词类——"英语的本质是词与词之间的修饰关系" 名词( Noun ) 形容词( Adjective ) 动词( Verb ) 副词( Adverbs ) 修饰关系——"理解词与词之间的修饰关系与规则" 📌句子结构 句子的基本成分 五种基本句型和三种句子类型 关于…

ROC和AUC也不是评估机器学习性能的金标准

对于不平衡数据集,AUC值是分类器效果评估的常用标准。但如果在解释时不仔细,它也会有一些误导。以Davis and Goadrich (2006)中的模型为例。如图所示,左侧展示的是两个模型的ROC曲线,右侧展示的是precision-recall曲线 (PRC)。 Pr…

前端univer创建、编辑excel

前端univer创建、编辑excel 源码在线demo:https://codesandbox.io/p/sandbox/univer-q87kqg?file/src/Demo.jsx univer官网地址:https://univer.ai/zh-CN/guides/sheet/introduction 安装univer npm install univerjs/core univerjs/design univerjs…

大模型爬虫—ScrapeGraphAI

大模型爬虫—ScrapeGraphAI 一、介绍 ScrapeGraphAI是一个网络爬虫 Python 库,使用大型语言模型和直接图逻辑为网站和本地文档(XML,HTML,JSON 等)创建爬取管道。 只需告诉库您想提取哪些信息,它将为您完成! scrapegraphai有三种主要的爬取管道可用于从网站(或本地文…

dockerfile 添加arthas 监控插件。容器添加arthas监控

1. arthas官网: 简介 | arthas 2. arthas下载地址: Releases alibaba/arthas GitHub 3. 下载版本: 4. 下载压缩包后,解压缩,放入Dockerfile 同级目录 5. dockerfile 命令: RUN mkdir -p /opt/arthas…

HarmonyOS鸿蒙开发实战(5.0)自定义全局弹窗实践

鸿蒙HarmonyOS开发实战往期文章必看: HarmonyOS NEXT应用开发性能实践总结 最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通) 非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&am…

【RPA私教课:UIPath】RPA 赋能科技企业,登录时验证码自动截取

在某科技型企业里,专门设置了一个验证码接收系统。每当用户进行登录操作时,都必须从这个系统中抓取最新的登录验证码,以确保登录的安全性。 具体需求如下: 客户会预先在表格中妥善保存众多的账户和密码。当 RPA 机器人在业务系统…

weblogic CVE-2017-3506 靶场攻略

漏洞描述 Weblogic的WLS Security组件对外提供了webserver服务,其中使⽤了XMLDecoder来解析⽤户输⼊的XML数据,在解析过程中出现反序列化漏洞,可导致任意命令执⾏。 影响版本 受影响版本:WebLogic 10.3.6.0, 12.1.3.0, 12.2.1.…

idea启动oom了解决

解决 Error:java: java.lang.OutOfMemoryError: WrappedJavaFileObject[org.jetbrains.jps.javac.InputFileObject[file:///D:/mingan/pb/backend/src/main/java/com/cy/backend/service/impl/StorageServiceImpl.java]]pos36199: WrappedJavaFileObject[org.jetbrains.jps.j…

提升效率的AI工具集 - 轻松实现自动化

在这个快节奏、高效率的社会中,我们每个人都渴望能够找到提升工作效率的捷径。幸运的是,随着人工智能(AI)技术的迅猛发展,越来越多的AI工具涌现出来,为我们提供了强大的支持。这些工具不仅能够帮助我们提高…

JavaScript可视化

JavaScript 可视化通常涉及利用各种库和工具将数据转化为图形的形式,从而更直观地呈现信息。以下是一些流行的 JavaScript 可视化工具和库,以及一些关键知识点: 流行的 JavaScript 可视化库: 1. D3.js (Data-Driven Documents)&…

xtop:pt dmsa环境下如何写出timing data file

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 xtop的输入数据之一就是sta timing data,它是由各scenario的报告组成的,

MedPrompt:基于提示工程的医学诊断准确率优化方法

Medprompt:基于提示工程的医学诊断准确率优化方法 秒懂大纲解法拆解MedPrompt 提示词全流程分析总结创意视角 论文:Can Generalist Foundation Models Outcompete Special-Purpose Tuning? Case Study in Medicine 秒懂大纲 ├── 1 研究背景【描述背…