Permission: Campaign Staging and/or Campaign Public
Note: In this article, we will cover how to migrate a property/group from legacy campaigns to multi-campaign. Clients who implement after May 5th, 2021 will have their properties default to multi-campaigns and can disregard the steps in this article.
Enabling multi-campaign on an individual property is a two-step process that requires you to toggle the multi-campaign button to On and to add the updated code snippet to the individual property.
- Enable multi-campaign on individual property
- Enable multi-campaign on property group
- Set Type for property scenario(s)
- Set Type for property partition set(s)
- Retrieve and update code snippet on property
- Behavior changes between legacy campaign and multi-campaign scripts
- Update JavaScript code to resurface privacy manager
Note: Sourcepoint's multi-campaign feature is currently unavailable for AMP properties. Please utilize Campaign (Legacy) for AMP properties.
Enable multi-campaign on individual property
Click Properties on the left-hand panel and select Properties from the subsequent menu.
Navigate to a property on the list and toggle the button to On under the Multi-Campaign column inline with the property name.
Enable multi-campaign on property group
To enable multi-campaign for a property group, click Properties on the left-hand panel and select Property Groups from the subsequent menu.
Select a property group from the subsequent list and toggle the Multi-Campaign Enabled button to On.
Multi-campaign will be enabled for all properties associated with the property group.
With multi-campaign enabled for each property in the property group, you will need to update each individual property with a new code snippet.
Set Type for property scenario(s)
With the multi-campaign toggle enabled for a property, any pre-existing scenarios on the property will have a new Campaign Type field that needs to be assigned before a campaign can be successfully launched. The Campaign Type field is required to tie the scenario to a specific regulatory regime used in your implementation.
Click the property that is being migrated to multi-campaign from the property management page.
Click Scenarios on the property navigation bar.
Any pre-existing scenarios will have a new Campaign Type field. Click Set Type for each scenario.
Use the provided dropdown menu to select a campaign type for the scenario and click Update to save your selection.
Repeat as necessary for other scenarios.
Set Type for property partition set(s)
With the multi-campaign toggle enabled for a property, any pre-existing partition sets on the property will have a new Campaign Type field that needs to be assigned before a campaign can be successfully launched. The Campaign Type field is required to tie the partition set to a specific regulatory regime used in your implementation.
Click the property that is being migrated to multi-campaign from the property management page.
Click Partition Sets on the property navigation bar.
Any pre-existing partition sets will have a new Campaign Type field. Click Set Type for each partition set.
Use the provided dropdown menu to select a campaign type for the scenario and click Update to save your selection.
Repeat as necessary for other partition sets.
Retrieve and update code snippet on property
Note: For app type properties, please visit our mobile SDKs for information on how to implement Sourcepoint's code into your project:
With the multi-campaign button toggled to On for each property, click the < > icon inline with the property name.
In the subsequent modal, use the provided dropdown menu to select the types of campaigns you would like to run on the property. The implementation code will update as you make selections.
Click Copy Code when finished to copy the implementation code to your clipboard.
Add the implementation code to the property.
If you are updating an existing property that already has the Sourcepoint code snippet implemented, you will need to replace that original code snippet with the new code snippet.
//Example only. Please use stub files generated in Sourcepoint portal as it may have changed.
<script>"use strict";function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(){var t=function(){var t,e,o=[],n=window,r=n;for(;r;){try{if(r.frames.__tcfapiLocator){t=r;break}}catch(t){}if(r===n.top)break;r=r.parent}t||(!function t(){var e=n.document,o=!!n.frames.__tcfapiLocator;if(!o)if(e.body){var r=e.createElement("iframe");r.style.cssText="display:none",r.name="__tcfapiLocator",e.body.appendChild(r)}else setTimeout(t,5);return!o}(),n.__tcfapi=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return o;="o;" setgdprapplies="setGdprApplies" n[0]?n.length="n[0]?n.length">3&&2===parseInt(n[1],10)&&"boolean"==typeof n[3]&&(e=n[3],"function"==typeof n[2]&&n[2]("set",!0)):"ping"===n[0]?"function"==typeof n[2]&&n[2]({gdprApplies:e,cmpLoaded:!1,cmpStatus:"stub"}):o.push(n)},n.addEventListener("message",(function(t){var e="string"==typeof t.data,o={};if(e)try{o=JSON.parse(t.data)}catch(t){}else o=t.data;var n="object"===_typeof(o)&&null!==o?o.__tcfapiCall:null;n&&window.__tcfapi(n.command,n.version,(function(o,r){var a={__tcfapiReturn:{returnValue:o,success:r,callId:n.callId}};t&&t.source&&t.source.postMessage&&t.source.postMessage(e?JSON.stringify(a):a,"*")}),n.parameter)}),!1))};"undefined"!=typeof module?module.exports=t:t()}();
</script>
<script>(function () { var e = false; var c = window; var t = document; function r() { if (!c.frames["__uspapiLocator"]) { if (t.body) { var a = t.body; var e = t.createElement("iframe"); e.style.cssText = "display:none"; e.name = "__uspapiLocator"; a.appendChild(e) } else { setTimeout(r, 5) } } } r(); function p() { var a = arguments; __uspapi.a = __uspapi.a || []; if (!a.length) { return __uspapi.a } else if (a[0] === "ping") { a[2]({ gdprAppliesGlobally: e, cmpLoaded: false }, true) } else { __uspapi.a.push([].slice.apply(a)) } } function l(t) { var r = typeof t.data === "string"; try { var a = r ? JSON.parse(t.data) : t.data; if (a.__cmpCall) { var n = a.__cmpCall; c.__uspapi(n.command, n.parameter, function (a, e) { var c = { __cmpReturn: { returnValue: a, success: e, callId: n.callId } }; t.source.postMessage(r ? JSON.stringify(c) : c, "*") }) } } catch (a) { } } if (typeof __uspapi !== "function") { c.__uspapi = p; __uspapi.msgHandler = l; c.addEventListener("message", l, false) } })();
</script>
<script>
window._sp_queue = [];
window._sp_ = {
config: {
accountId: 22,
baseEndpoint: 'https://cdn.privacy-mgmt.com',
ccpa: { },
gdpr: { },
events: {
onMessageChoiceSelect: function() {
console.log('[event] onMessageChoiceSelect', arguments);
},
onMessageReady: function() {
console.log('[event] onMessageReady', arguments);
},
onMessageChoiceError: function() {
console.log('[event] onMessageChoiceError', arguments);
},
onPrivacyManagerAction: function() {
console.log('[event] onPrivacyManagerAction', arguments);
},
onPMCancel: function() {
console.log('[event] onPMCancel', arguments);
},
onMessageReceiveData: function() {
console.log('[event] onMessageReceiveData', arguments);
},
onSPPMObjectReady: function() {
console.log('[event] onSPPMObjectReady', arguments);
},
onConsentReady: function (consentUUID, euconsent) {
console.log('[event] onConsentReady', arguments);
},
onError: function() {
console.log('[event] onError', arguments);
},
}
}
}
</script>
<script src="https://cdn.privacy-mgmt.com/unified/wrapperMessagingWithoutDetection.js" async=""></script>
Note: The baseEndpoint
can also be changed to a CNAME first-party subdomain in order to persist first-party cookies on Safari web browser (due to Safari’s ITP) by setting cookies through the server with set-cookie
rather than using document.cookie
on the page.
If your organization has edited the baseEndpoint
with a CNAME DNS Record you will also need to edit the URL. Please follow the following format if necessary:
U.S. Privacy, GDPR TCF v2, GDPR Standard
https://client.domain.com/unified/wrapperMessagingWithoutDetection.js
Behavior changes between legacy and multi-campaign scripts
Below are behavioral changes that your organization can expect when migrating a property from our legacy script to Sourcepoint's multi-campaign script:
Custom action callbacks and events
Buttons assigned a custom action in your messages will return the onConsentReady
event callback and interaction complete
from the URL messaging library.
These returns do not indicate that consent was given but that no more changes to consent is expected and that the CMP is ready.
message_type
returned in callbacks
The following event callbacks will now return message_type
as the first argument. message_type
denotes the category to which the message belongs. Click here for more information.
onMessageReady
onMessageChoiceSelect
onPrivacyManagerAction
onMessageChoiceError
onConsentReady
onPMCancel
onMessageReceiveData
onError
Note: Review any code that you have configured for these callbacks to ensure you account for the message_type
argument.
Update JavaScript code to resurface privacy manager
Note: For app type properties, please visit our mobile SDKs for information on how to implement Sourcepoint's code into your project:
The privacy manager JavaScript code is a snippet that is added to a property and allows an end-user to resurface a privacy manager. Using this link/button, end-users can directly manage their consent preferences on an ongoing basis without having to re-encounter your organization's first layer message.
When migrating a property to multi-campaign you will need to update the Javascript code and include .gdpr.
or .ccpa.
in the command. Click here to learn more.
<button onclick="window._sp_.gdpr.loadPrivacyManagerModal(123456, 'vendors')">Privacy Manager GDPR</button>
Call window._sp_.gdpr.loadPrivacyManagerModal()
without passing a parameter and the property's group privacy manager as specified by groupPmId
will display to the end-user:
<button onclick="window._sp_.gdpr.loadPrivacyManagerModal()">Privacy Manager GDPR</button>
<button onclick="window._sp_.ccpa.loadPrivacyManagerModal(789876)">Privacy Manager CCPA</button>
Comments
0 comments