问题描述
我已经在我的React Web应用程序上为Google Analytics(分析)编写了一个打字稿类。
import type { gtagObj } from "./types";
declare global {
interface Window {
dataLayer: any;
}
}
export class GoogleAnalytics {
private static instance: GoogleAnalytics;
private trackerId: string;
private gtagFn: gtagObj;
private constructor(trackerId: string,userId?: string) {
this.appendAnalyticsScript(trackerId);
this.gtagFn = function gtag() {
//@ts-ignore
dataLayer.push(arguments);
console.log(window.dataLayer);
console.log(arguments);
};
this.trackerId = trackerId;
this.startAnalytics(userId);
}
private appendAnalyticsScript(trackerId: string) {
const analyticsScript = document.createElement("script");
analyticsScript.src = `https://www.googletagmanager.com/gtag/js?id=${trackerId}`;
analyticsScript.async = true;
document.head.appendChild(analyticsScript);
window.dataLayer = window.dataLayer || [];
}
public static getInstance(trackerId = "",userId?: string): GoogleAnalytics {
if (!GoogleAnalytics.instance) {
if (trackerId !== "") {
GoogleAnalytics.instance = new GoogleAnalytics(trackerId,userId);
} else {
throw new Error(
"you must provide a Tracker ID when initializing the Analytics Object."
);
}
}
return GoogleAnalytics.instance;
}
private startAnalytics(userId?: string) {
this.gtagFn("js",new Date());
const userObj = userId ? { user_id: userId } : {};
this.gtagFn("config",this.trackerId,userObj);
}
public trackNavigation(page: string) {
this.gtagFn("event","screen_view",{
screen_name: page
});
}
public trackItemSelected(item: Gtag.Item) {
this.gtagFn("event","item_view",{
items: [item]
});
}
public _gtag(args: Parameters<gtagObj>) {
this.gtagFn.apply(null,args);
}
}
我使用useEffect初始化根组件内的单例:
useEffect(() => {
const ga = GoogleAnalytics.getInstance("G-XXXXXXX",userId.toString());
},[]);
onClick={() => {
setId(objId);
GoogleAnalytics.getInstance().trackItemSelected({ id: objId });
}}
或使用useEffect,当加载特定组件时,我还会记录一个screen_view事件。
这两者(尽管已记录为有效呼叫,或换句话说已推送到dataLayer中),均未出现在此应用程序的分析网页中。
到目前为止,我仅使用GA4和数据流配置了分析功能。在数据流内部,“过去48小时内没有数据”。
我真的很感谢您!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)