Skip to content

Analytics Consent not sent on update #8210

Closed
@megamisan

Description

@megamisan

Operating System

Windows 11 23H2

Browser Version

Edge 124.0.2478.51

Firebase SDK Version

10.11.0

Firebase SDK Product:

Analytics, AppCheck, Auth, Firestore, Functions, Storage

Describe your project's tooling

Vue.js app.

Describe the problem

I'm trying to get analytics to work with consent banner and sending advanced consent information with the setConsent method.

Steps and code to reproduce issue

In the projet, initialize Firebase first. I consider app to be a constant containing the firebase application instance in the following snippet:

import { setAnalyticsCollectionEnabled, setConsent } from 'firebase/analytics'

const analytics = app.analytics()
// Add some delay to wait for gtag loading
setTimeout(() => {
  console.log('Called')
  setAnalyticsCollectionEnabled(this._analytics, consent)
  setConsent({
    ad_personalization: 'denied',
    ad_storage: 'denied',
    ad_user_data: 'denied',
    analytics_storage: 'granted',
    functionality_storage: 'granted',
    personalization_storage: 'denied',
    security_storage: 'granted',
  })}, 5000)

Using Tag Assitant, I can see the tag events. However, I get this result:
image

The granted value is missing and there is strange numbered items.

Doing a some step-by-step debugging, I found the call to gtag. The third parameter which should be the ConsentSettings (see Set up consent mode on websites is set to the second parameter update instead of the third.
Debug screenshot

The setConsent method code is here packages/analytics/src/api.ts#L768.
It trigger the call to the gtagWrapper function with this line:

wrappedGtagFunction(GtagCommand.CONSENT, 'update', consentSettings);

The wrappedGtagFunction is an instance of the gtagWrapper function found in packages/analytics/src/helpers.ts#L279.

When the method is called before initialization of gtag, the call is made correctly. setContent sends the settings to _setConsentDefaultForInit and the packages/analytics/src/initialize-analytics.t:_initializeAnalyticss#L129 function use these settings correctly.

I see two possible fixes:

  • Removing the 'update' parameter in setConsent, thus the diff:
    @@ -766,5 +766,5 @@
      // Check if reference to existing gtag function on window object exists
      if (wrappedGtagFunction) {
    -    wrappedGtagFunction(GtagCommand.CONSENT, 'update', consentSettings);
    +    wrappedGtagFunction(GtagCommand.CONSENT, consentSettings);
      } else {
        _setConsentDefaultForInit(consentSettings);
  • Retrieves the second argument from the args array.

I recommend the first option.

Original commits:

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions