Migrate property to multi-campaign

   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.

  1. Enable multi-campaign on individual property
  2. Enable multi-campaign on property group
  3. Set Type for property scenario(s)
  4. Set Type for property partition set(s)
  5. Retrieve and update code snippet on property
  6. Behavior changes between legacy campaign and multi-campaign scripts
  7. 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.

Screen_Shot_2021-10-27_at_4.35.04_PM.png

Navigate to a property on the list and toggle the button to On under the Multi-Campaign column inline with the property name.

Screen_Shot_2021-10-27_at_4.43.45_PM.png


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.

Screen_Shot_2021-10-27_at_4.49.55_PM.png

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.

Screen_Shot_2021-10-27_at_4.51.49_PM.png

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.

Screen_Shot_2022-10-14_at_8.43.13_AM.png

Click Scenarios on the property navigation bar.

Screen_Shot_2022-10-14_at_8.46.11_AM.png

Any pre-existing scenarios will have a new Campaign Type field. Click Set Type for each scenario. 

Screen_Shot_2023-01-17_at_10.23.21_AM.png

Use the provided dropdown menu to select a campaign type for the scenario and click Update to save your selection.

Screen_Shot_2023-01-17_at_10.23.36_AM.png

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.

Screen_Shot_2022-10-14_at_8.43.13_AM.png

Click Partition Sets on the property navigation bar.

Screen_Shot_2022-10-14_at_8.46.11_AM_copy.png

Any pre-existing partition sets will have a new Campaign Type field. Click Set Type for each partition set. 

Screen_Shot_2023-01-17_at_10.27.34_AM.png

Use the provided dropdown menu to select a campaign type for the scenario and click Update to save your selection.

Screen_Shot_2023-01-17_at_10.28.14_AM.png

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.

Screen_Shot_2021-10-27_at_4.54.50_PM.png

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.

Screen_Shot_2023-01-17_at_10.30.38_AM.png

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. 

GDPR TCF/Standard U.S. Privacy (Legacy)
<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>
Was this article helpful?
1 out of 1 found this helpful

Comments

0 comments

Article is closed for comments.