Events in Analytics are missing In the dashboard /Big query
- Dominant language
- TypeScript
- Stars
- 7.8k
- Forks
- 2.2k
- Avg merge
- 22h 28m
- Merged PRs (30d)
- 6
Description
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);
}
}
Contributor guide
Research direction
Start with the Angular component subscription and AnalyticsService.customlogEvent, then inspect the calls to AngularFireAnalytics.logEvent and setUserProperties. Reproduce the reported missing events and compare the debugger output with the events exported to BigQuery; done means the cause of the missing events and any supported reliability limits are established.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- angular, firebase, typescript
- Domain
- analytics, frontend
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100