ScreenTrackingService and UserTrackingService not triggering events in Angular 19

Open
#3,633 5 comments 2 reactions 0 assignees View on GitHub

Maintainers usually reply within 3 days

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
angular, firebase, typescript

Research direction

Start with app.config.ts and the ScreenTrackingService and UserTrackingService entry points, then reproduce navigation from app.routes.ts and authentication changes using signInWithPopup. Check why the service constructors and ɵscreenViewEvent are not reached. Done means route changes and login/logout produce the expected events in Firebase DebugView.

Written by the indexing model from the issue text.

Description

Overview of the Issue

Using Angular 19 and AngularFire 19, the ScreenTrackingService and UserTrackingService do not trigger events.

Angular Version

Here is a section of my package.json:

"dependencies": {
    "@angular/animations": "^19.0.0",
    "@angular/cdk": "^19.1.2",
    "@angular/common": "^19.0.0",
    "@angular/compiler": "^19.0.0",
    "@angular/core": "^19.0.0",
    "@angular/fire": "^19.0.0",
    "@angular/forms": "^19.0.0",
    "@angular/platform-browser": "^19.0.0",
    "@angular/platform-browser-dynamic": "^19.0.0",
    "@angular/router": "^19.0.0",
    "@ngrx/signals": "^19.0.0",
    "@ngrx/store": "^19.0.0",
    "@ngrx/store-devtools": "^19.0.0",
    "@ngx-translate/core": "^16.0.4",
    "@ngx-translate/http-loader": "^16.0.1",
    "@tailwindcss/postcss": "^4.0.0",
    "lodash": "^4.17.21",
    "postcss": "^8.5.1",
    "rxjs": "~7.8.0",
    "tailwindcss": "^4.0.0",
    "tslib": "^2.3.0",
    "zone.js": "~0.15.0"
  },
Motivation for or Use Case

These services are supposed to automatically log router and firebase authentication events. When I use the logEvent function from the analytics package, events are logged, but I do not see any events logged from ScreenTrackingService and UserTrackingService

Browsers and Operating System

I am using Chrome Version 133.0.6943.142 (Official Build) (64-bit) on Windows 10

Reproduce the Error

On the DebugView in the Firebase Console, I can see the page_view event for the initial page load.

When I click links to routes around my app, or when I login and logout, I do not see any events.

Here is a component where I am manually triggering an event, and I can see the event in the DebugView:

@Component({
  selector: 'app-home',
  imports: [CommonModule, SharedModule, TranslateModule, RouterModule],
  templateUrl: './home.component.html',
  styleUrl: './home.component.css'
})
export class HomeComponent {
  readonly analytics = inject(Analytics);

  chooseSample(sample: { name: string, words: string[] }) {
    logEvent(this.analytics, 'select_item', {
      items: [{ item_name: sample.name }],
      item_list_name: 'Samples',
      item_list_id: 'samples'
    });
  }
}

Here is my app.routes.ts file:

export const routes: Routes = [
  {
    path: '',
    loadComponent: () => import('./home/home.component').then(c => c.HomeComponent)
  },
  {
    path: 'samples',
    loadChildren: () => import('./samples/sample.module').then(c => c.SampleModule)
  },
];

Here is the sample.module file:

@NgModule({
  imports: [
    CommonModule,
    SampleRoutingModule
  ]
})
export class SampleModule { }

Here is the SampleRoutingModule:

const routes: Routes = [
  {
    path: '',
    component: ListComponent
  },
  {
    path: 'create',
    component: CreateComponent
  },
  {
    path: 'view/:id',
    component: ViewComponent
  },
  {
    path: 'edit/:id',
    component: EditComponent
  }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class SampleRoutingModule { }

On the HomeComponent, I link to the various pages in the SampleModule like this:

<a routerLink="samples">{{ 'samples' | translate }}</a>
<a routerLink="/samples/create">{{ 'create a sample' | translate }}</a>

Here is my app.config.ts file:

export const appConfig: ApplicationConfig = {
  providers: [
    provideZoneChangeDetection({ eventCoalescing: true }),
    provideHttpClient(),
    importProvidersFrom([TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: httpLoaderFactory,
        deps: [HttpClient],
      },
    })]),
    provideRouter(routes, withInMemoryScrolling({ anchorScrolling: 'enabled'})),
    provideStore({}),
    provideStoreDevtools({ maxAge: 25, logOnly: environment.production, trace: true, traceLimit: 50 }),
    provideFirebaseApp(() => initializeApp(environment.firebase)),
    provideAuth(() => {
      const auth = getAuth();
      if (!environment.production) {
        connectAuthEmulator(auth, 'http://192.168.1.104:9099', { disableWarnings: true });
      }
      return auth;
    }),
    provideAnalytics(() => getAnalytics()),
    ScreenTrackingService,
    UserTrackingService,
    provideAppCheck(() => {
      if (!environment.production) {
        self.FIREBASE_APPCHECK_DEBUG_TOKEN = true;
      }
      const provider = new ReCaptchaEnterpriseProvider(environment.reCaptchaSiteKey);
      return initializeAppCheck(undefined, { provider, isTokenAutoRefreshEnabled: true });
    }),
    provideFirestore(() => {
      const firestore = getFirestore();
      if (!environment.production) {
        connectFirestoreEmulator(firestore, '192.168.1.104', 8080);
      }
      return firestore;
    }),
    provideFunctions(() => {
      const functions = getFunctions();
      if (!environment.production) {
        connectFunctionsEmulator(functions, '192.168.1.104', 5001);
      }
      return functions;
    })
  ]
};

I also tried these configs in the app config and the result was the same:

    { provide: ScreenTrackingService },
    { provide: UserTrackingService },
    { provide: ScreenTrackingService, useClass: ScreenTrackingService },
    { provide: UserTrackingService, useClass: UserTrackingService },
    { provide: ScreenTrackingService, useExisting: ScreenTrackingService },
    { provide: UserTrackingService, useExisting: UserTrackingService },
Suggest a Fix

When I run the Google Analytics Debugger, I can see events logging in the console from the logEvent function call in the HomeComponent. When I click various router links, I do not see any logs in the console. When I log in and out (using firebase auth signInWithPopup), I don't see any logs.

I added some debugger breakpoints in the ScreenTrackingService and UserTrackingService. The breakpoints at the top of the file are hit, so the file is loading. But the breakpoints in the constructors and ɵscreenViewEvent function are not hit at all.

It seems like the ScreenTrackingService and UserTrackingService are not getting constructed, called, or instantiated.

Dominant language
TypeScript
Stars
7.8k
Forks
2.1k
Avg merge
2d 22h
Merged PRs (30d)
25

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from angular/angularfire

All issues in angular/angularfire

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.