From 005dd99e910e85c2427b757a13d11f113207044e Mon Sep 17 00:00:00 2001 From: Gabriel P Samson Date: Mon, 20 Jul 2020 11:46:13 -0700 Subject: [PATCH 1/3] Add support for preset data processing options --- integrations/facebook-pixel/lib/index.js | 27 +++++++++++++++- integrations/facebook-pixel/package.json | 2 +- .../facebook-pixel/test/index.test.js | 32 +++++++++++++++++++ 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/integrations/facebook-pixel/lib/index.js b/integrations/facebook-pixel/lib/index.js index da319459f..712d31a76 100644 --- a/integrations/facebook-pixel/lib/index.js +++ b/integrations/facebook-pixel/lib/index.js @@ -104,7 +104,9 @@ FacebookPixel.prototype.initialize = function() { window.fbq('set', 'autoConfig', false, this.options.pixelId); } if (this.options.limitedDataUse) { - window.fbq('dataProcessingOptions', ['LDU'], 0, 0); + this.validateAndSetDataProcessing( + window.fbDataProcessingOptions || [['LDU'], 0, 0] + ); } if (this.options.initWithExistingTraits) { var traits = this.formatTraits(this.analytics); @@ -718,6 +720,29 @@ FacebookPixel.prototype.buildPayload = function(track, isStandardEvent) { return payload; }; +/** + * Validates that a set of parameters are formatted correctly and passes them to the pixel instance. + * https://developers.facebook.com/docs/marketing-apis/data-processing-options#reference + * + * @param {Array} options + * + * @api private + */ +FacebookPixel.prototype.validateAndSetDataProcessing = function(params) { + var lenOk = params.length === 3; + var valOk = + Array.isArray(params[0]) && + typeof params[1] === 'number' && + typeof params[2] === 'number'; + + // Pass the data processing options if they're valid, otherwise, fallback to geolocation. + if (lenOk && valOk) { + window.fbq('dataProcessingOptions', params[0], params[1], params[2]); + } else { + window.fbq('dataProcessingOptions', ['LDU'], 0, 0); + } +}; + /** * Merge two javascript objects. This works similarly to `Object.assign({}, obj1, obj2)` * but it's compatible with old browsers. The properties of the first argument takes preference diff --git a/integrations/facebook-pixel/package.json b/integrations/facebook-pixel/package.json index 6910bbd81..6e96ee045 100644 --- a/integrations/facebook-pixel/package.json +++ b/integrations/facebook-pixel/package.json @@ -1,7 +1,7 @@ { "name": "@segment/analytics.js-integration-facebook-pixel", "description": "The Facebook Pixel analytics.js integration.", - "version": "2.11.0", + "version": "2.11.1", "keywords": [ "analytics.js", "analytics.js-integration", diff --git a/integrations/facebook-pixel/test/index.test.js b/integrations/facebook-pixel/test/index.test.js index 7e85a6eb8..dc569d6d4 100644 --- a/integrations/facebook-pixel/test/index.test.js +++ b/integrations/facebook-pixel/test/index.test.js @@ -200,6 +200,38 @@ describe('Facebook Pixel', function() { ); }); }); + + describe('#initialize with preset data processing options', function() { + before(function() { + window.fbDataProcessingOptions = [['LDU'], 99, 99]; + }); + + after(function() { + delete window.fbDataProcessingOptions; + }); + + it('should call dataProcessingOptions with the preset values', function() { + analytics.stub(window, 'fbq'); + analytics.initialize(); + analytics.called(window.fbq, 'dataProcessingOptions', ['LDU'], 99, 99); + }); + }); + + describe('#initialize with fallback data processing options', function() { + before(function() { + window.fbDataProcessingOptions = ['a string', true, 99]; + }); + + after(function() { + delete window.fbDataProcessingOptions; + }); + + it('should call dataProcessingOptions with fallback values', function() { + analytics.stub(window, 'fbq'); + analytics.initialize(); + analytics.called(window.fbq, 'dataProcessingOptions', ['LDU'], 0, 0); + }); + }); }); describe('loading', function() { From 6e98791d5ac9a51d5d823fd60f288409ea553476 Mon Sep 17 00:00:00 2001 From: Gabriel P Samson Date: Tue, 21 Jul 2020 13:27:37 -0700 Subject: [PATCH 2/3] Read preset data processing opts from settings --- integrations/facebook-pixel/lib/index.js | 2 +- integrations/facebook-pixel/test/index.test.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/integrations/facebook-pixel/lib/index.js b/integrations/facebook-pixel/lib/index.js index 712d31a76..6c471b36b 100644 --- a/integrations/facebook-pixel/lib/index.js +++ b/integrations/facebook-pixel/lib/index.js @@ -105,7 +105,7 @@ FacebookPixel.prototype.initialize = function() { } if (this.options.limitedDataUse) { this.validateAndSetDataProcessing( - window.fbDataProcessingOptions || [['LDU'], 0, 0] + this.options.dataProcessingOptions || [['LDU'], 0, 0] ); } if (this.options.initWithExistingTraits) { diff --git a/integrations/facebook-pixel/test/index.test.js b/integrations/facebook-pixel/test/index.test.js index dc569d6d4..4e3a8c5c2 100644 --- a/integrations/facebook-pixel/test/index.test.js +++ b/integrations/facebook-pixel/test/index.test.js @@ -203,11 +203,11 @@ describe('Facebook Pixel', function() { describe('#initialize with preset data processing options', function() { before(function() { - window.fbDataProcessingOptions = [['LDU'], 99, 99]; + options.dataProcessingOptions = [['LDU'], 99, 99]; }); after(function() { - delete window.fbDataProcessingOptions; + delete options.dataProcessingOptions; }); it('should call dataProcessingOptions with the preset values', function() { @@ -219,11 +219,11 @@ describe('Facebook Pixel', function() { describe('#initialize with fallback data processing options', function() { before(function() { - window.fbDataProcessingOptions = ['a string', true, 99]; + options.dataProcessingOptions = ['a string', true, 99]; }); after(function() { - delete window.fbDataProcessingOptions; + delete options.dataProcessingOptions; }); it('should call dataProcessingOptions with fallback values', function() { From d251238f038eb42b75081826bb4674014036a82d Mon Sep 17 00:00:00 2001 From: Gabriel P Samson Date: Wed, 22 Jul 2020 14:04:00 -0700 Subject: [PATCH 3/3] Update HISTORY.md --- integrations/facebook-pixel/HISTORY.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/integrations/facebook-pixel/HISTORY.md b/integrations/facebook-pixel/HISTORY.md index c16b471bb..8bd36ed00 100644 --- a/integrations/facebook-pixel/HISTORY.md +++ b/integrations/facebook-pixel/HISTORY.md @@ -1,3 +1,17 @@ +2.11.1/ 2020-07-22 +================== + + * Add support to override the Data Processing Options by pass them in the load options object. + ``` + analytics.load("", { + integrations: { + 'Facebook Pixel': { + dataProcessingOptions: [['LDU'], 1, 1000] + } + } + }); + ``` + 2.11.0/ 2020-07-16 ==================