Events in Analytics are missing In the dashboard /Big query
- 主要語言
- TypeScript
- 星號
- 7.8k
- 分支
- 2.2k
- 平均合併
- 22 小時 28 分鐘
- 30 天內合併 PR
- 6
描述
Version info
Angular: 14
Firebase: 9.X.X
AngularFire: 7.4.1
Other (e.g. Ionic/Cordova, Node, browser, operating system): chrome, phones, Edge, safari
How to reproduce these conditions: trying to upload app
Steps to set up and reproduce: X
Sample data and security rules: X
Debug output
** In the debugger, I also notice the term 'undefined.' I'm not sure if this is related. Here's a snippet of what I see in the debugger:
js?l=dataLayer&id=G-XXXX:296 Sending event "event_name" to undefined
js?l=dataLayer&id=G-XXXX:296 Request parameters:
js?l=dataLayer&id=G-XXXX:296 en: event_name
js?l=dataLayer&id=G-XXXX:296 ep.origin: firebase
js?l=dataLayer&id=G-XXXX:296 ep.some_id: 12123124
js?l=dataLayer&id=G-XXXXX:296 ep.some_name: Name 123 Name
js?l=dataLayer&id=G-XXXX:296 Sending request: https://www.google-analytics.com/g/collect?v=2&tid=G-.......
**
** Output from firebase.database().enableLogging(true); ** X
** Screenshots ** - X
Expected behavior
I have an Angular application integrated with Firebase, and the data is exported to BigQuery.
In my Angular app, there is a requirement to send an event to analytics upon loading. However, I've noticed that only 80-90% of other events(in other application) are being tracked, even for the same user and the same device/platform, and there are no ad blockers in use.
I have attempted to use async/await to ensure that the event is sent reliably. Is this approach appropriate? Does the code appear to be correct? Is there a way to ensure that the event will always be sent?
Could it be beneficial to send another event elsewhere? Is there a potential issue with the data itself?
Is there something that can be improved in the analytics configuration itself?
When using the Analytics Debugger Chrome extension, I can see the events, but testing with external users is challenging.
My goal is to get 100%of the events
Actual behavior
component
this.test$ = this.data$.pipe(map((data) => data.test));
this.test$.subscribe(async (test) => {
const analyticsEvent: AnalyticsEventData = {
some_id: string,
some_id2: string
some_name: string,
some_id: string,
some_date: firebase-timestampObject.toMillis(),
app_name: 'string',
};
this.analyticsService.data = analyticsEvent;
await this.analyticsService.custonlogEvent('event_name');
await this.analyticsService.setUserProperties(analyticsEvent);
});
any my analytics service
import { Injectable } from '@angular/core';
import { AngularFireAnalytics } from '@angular/fire/compat/analytics';
@Injectable({
providedIn: 'root',
})
export class AnalyticsService {
constructor(private analytics: AngularFireAnalytics) {}
private _data:AnalyticsEventData;
get data() {
return this._data;
}
set data(value) {
this._data = value;
}
async customlogEvent(eventName: string, params?: { [key: string]: any }) {
try {
if (!this._data) throw new Error('error');
const generalParameters = this._data;
const paramsObject = {
...generalParameters,
...params,
};
await this.analytics.logEvent(eventName, paramsObject);
} catch (e) {
console.log(e);
}
return true;
}
async setUserProperties(params: { [key: string]: any }) {
return await this.analytics.setUserProperties(params);
}
}
貢獻指南
研究方向
從 Angular 元件訂閱和 AnalyticsService.customlogEvent 開始,然後檢查對 AngularFireAnalytics.logEvent 和 setUserProperties 的呼叫。重現回報的事件遺失問題,並將偵錯工具輸出與匯出至 BigQuery 的事件進行比較;確立事件遺失的原因以及任何受支援的可靠性限制後,即視為完成。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- angular, firebase, typescript
- 領域
- analytics, frontend
- Issue 類型
- 缺陷
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 停滯
- 描述清晰度
- 需要釐清
- 新手友好度
- 25/100