diff --git a/packages/analytics-js-integrations/__tests__/integrations/GA4/browser.test.js b/packages/analytics-js-integrations/__tests__/integrations/GA4/browser.test.js index 230d39ac78..8c6fbd2b0e 100644 --- a/packages/analytics-js-integrations/__tests__/integrations/GA4/browser.test.js +++ b/packages/analytics-js-integrations/__tests__/integrations/GA4/browser.test.js @@ -13,14 +13,15 @@ const destinationInfo = { // jest.mock('this.analytics.getUserId', () => '1234'); describe('Google Analytics 4 init tests', () => { - test('Testing init call of Google Analytics 4 with MeasurementId', () => { + test('Testing init call of Google Analytics 4 with MeasurementId and SdkBaseUrl', () => { const ga4 = new GA4( - { measurementId: 'G-123456', debugView: true }, + { measurementId: 'G-123456', debugView: true, sdkBaseUrl: 'https://www.example.com//' }, { getUserId: () => '1234', getUserTraits: () => {} }, destinationInfo, ); ga4.init(); expect(typeof window.gtag).toBe('function'); + expect(ga4.sdkBaseUrl).toEqual('https://www.example.com'); }); }); @@ -56,7 +57,11 @@ describe('Google Analytics 4 Page events tests', () => { let ga4; const { description, input, output } = event; beforeEach(() => { - ga4 = new GA4(input.config, { getUserId: () => '1234', getUserTraits: () => {} }, destinationInfo); + ga4 = new GA4( + input.config, + { getUserId: () => '1234', getUserTraits: () => {} }, + destinationInfo, + ); ga4.init(); window.gtag = jest.fn(); }); diff --git a/packages/analytics-js-integrations/src/integrations/GA4/browser.js b/packages/analytics-js-integrations/src/integrations/GA4/browser.js index 777551494c..37ac164a9b 100644 --- a/packages/analytics-js-integrations/src/integrations/GA4/browser.js +++ b/packages/analytics-js-integrations/src/integrations/GA4/browser.js @@ -8,7 +8,7 @@ import { import { Cookie } from '@rudderstack/analytics-js-common/v1.1/utils/storage/cookie'; import Logger from '../../utils/logger'; import { eventsConfig } from './config'; -import { constructPayload, flattenJsonPayload } from '../../utils/utils'; +import { constructPayload, flattenJsonPayload, removeTrailingSlashes } from '../../utils/utils'; import { shouldSendUserId, prepareParamsAndEventName, @@ -37,6 +37,8 @@ export default class GA4 { this.piiPropertiesToIgnore = config.piiPropertiesToIgnore || []; this.extendPageViewParams = config.extendPageViewParams || false; this.overrideClientAndSessionId = config.overrideClientAndSessionId || false; + this.sdkBaseUrl = + removeTrailingSlashes(config.sdkBaseUrl) || 'https://www.googletagmanager.com'; ({ shouldApplyDeviceModeTransformation: this.shouldApplyDeviceModeTransformation, propagateEventsUntransformedOnError: this.propagateEventsUntransformedOnError, @@ -44,7 +46,7 @@ export default class GA4 { } = destinationInfo ?? {}); } - loadScript(measurementId) { + loadScript(measurementId, sdkBaseUrl) { window.dataLayer = window.dataLayer || []; window.gtag = window.gtag || @@ -128,14 +130,11 @@ export default class GA4 { this.sessionNumber = sessionNumber; }); - ScriptLoader( - 'google-analytics 4', - `https://www.googletagmanager.com/gtag/js?id=${measurementId}`, - ); + ScriptLoader('google-analytics 4', `${sdkBaseUrl}/gtag/js?id=${measurementId}`); } init() { - this.loadScript(this.measurementId); + this.loadScript(this.measurementId, this.sdkBaseUrl); } /**