# Privacy &amp; Messaging JavaScript API Samples

## Show the message to a random sample of your traffic

    <script>
      // Make sure that the googlefc property exists on the window.
      window.googlefc = window.googlefc || {};
      // To guarantee functionality, this must go before the tag on the page.
      googlefc.controlledMessagingFunction = (message) => {
        // Show the message to 10% of traffic.
        var percentageToShowTo = 10;

        // Pick a random number between 0 and 100.
        var rand = Math.random() * 100;

        if (rand <= percentageToShowTo) {
          message.proceed(true);
        } else {
          message.proceed(false);
        }
      };
    </script>

## Don't show the message to subscribers

(Assumes that you have a function with information on whether a user is a
subscriber)

    <script>
      // Make sure that the googlefc property exists on the window.
      window.googlefc = window.googlefc || {};
      // To guarantee functionality, this must go before the tag on the page.
      googlefc.controlledMessagingFunction = (message) => {
        // checkSubscriptionStatus() is an example of a function that may exist
        // in your codebase that resolves a promise with true or false depending on
        // whether the user on the page is a subscriber.
        checkSubscriptionStatus().then(
          function (isSubscriber) {
            // Do not show the message if a user is a subscriber.
            if (isSubscriber) {
              message.proceed(false);
            } else {
              message.proceed(true);
            }
          }
        );
      }
    </script>

## Show the message everywhere except your home page

    <script>
      // Make sure that the googlefc property exists on the window.
      window.googlefc = window.googlefc || {};
      // To guarantee functionality, this must go before the tag on the page.
      googlefc.controlledMessagingFunction = (message) => {
        var pathname = location.pathname;

        // This assumes other pages on your site are differentiated with a different
        // path. `location.href` can also be used if more information is needed to
        // differentiate between the home page and other pages on the site.
        if (pathname.length > 1) {
          message.proceed(true);
        } else {
          message.proceed(false);
        }
      };
    </script>

## Only show the message after a certain number of pageviews

(Assumes that you have your own cookie or other mechanism to track the number of
pageviews)

    <script>
      // Make sure that the googlefc property exists on the window.
      window.googlefc = window.googlefc || {};
      // To guarantee functionality, this must go before the tag on the page.
      googlefc.controlledMessagingFunction = (message) => {
        // How many pageviews before the message is shown.
        var freePageviewsLimit = 3;

        // Check how many pages the user has seen.
        var pagesViewed = getPagesViewed();

        // Show the message if the user has seen more pages than the free limit.
        if (pagesViewed >= freePageviewsLimit) {
          message.proceed(true);
        } else {
          message.proceed(false);
        }
      };
    </script>

## Track events associated with allow-ads and ad blocking users in Google Analytics with the News Tagging Guide (NTG)

Replace UA-xxxxxxxxx-x with the correct account tracking ID.

More information on the News Tagging Guide can be found
[here](https://gweb-news-initiative-training.uc.r.appspot.com/training/datatools/ntg).

    <!-- Google Analytics -->
    <script>
    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
    ga('create', 'UA-xxxxxxxxx-x', 'auto');
    ga('send', 'pageview');
    </script>
    <script async src='https://www.google-analytics.com/analytics.js'></script>
    <!-- End Google Analytics -->

    <script>
      // Make sure that the googlefc property exists on the window.
      window.googlefc = window.googlefc || {};
      googlefc.callbackQueue = googlefc.callbackQueue || [];
      googlefc.callbackQueue.push({
        'AD_BLOCK_DATA_READY': function() {
          switch (googlefc.getAdBlockerStatus()) {
            case googlefc.AdBlockerStatusEnum.EXTENSION_LEVEL_AD_BLOCKER:
            case googlefc.AdBlockerStatusEnum.NETWORK_LEVEL_AD_BLOCKER:
              ga('send', 'event', {
                eventCategory: 'NTG adblock',
                eventAction: 'detected',
                eventLabel: '<page url>',
                nonInteraction: true
              });
              break;
          }
          switch (googlefc.getAllowAdsStatus()) {
            case googlefc.AllowAdsStatusEnum.ADS_ALLOWED:
              ga('send', 'event', {
                eventCategory: 'NTG adblock',
                eventAction: 'allow-ads',
                eventLabel: '<page url>',
                nonInteraction: true
              });
              break;
          }
       }});
    </script>

## Track events in Google Analytics to determine users' ad blocking usage

Can be used to determine what percentage of users is using a network-level ad
blocker, extension-level ad blocker or no ad blocker.

Replace UA-xxxxxxxxx-x with the correct account tracking ID.

See the [Google Analytics Docs](https://developers.google.com/analytics/devguides/collection/analyticsjs)
for more information about analytics.

    <!-- Google Analytics -->
    <script>
    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
    ga('create', 'UA-xxxxxxxxx-x', 'auto');
    ga('send', 'pageview');
    </script>
    <script async src='https://www.google-analytics.com/analytics.js'></script>
    <!-- End Google Analytics -->

    <script>
      // Make sure that the googlefc property exists on the window.
      window.googlefc = window.googlefc || {};
      googlefc.callbackQueue = googlefc.callbackQueue || [];
      googlefc.callbackQueue.push({
        'AD_BLOCK_DATA_READY': function() {
          var analyticsData = {
              hitType: 'event',
              eventCategory: 'Funding Choices',
              eventAction: 'Ad Blocking Type'
            };
          switch (googlefc.getAdBlockerStatus()) {
            case googlefc.AdBlockerStatusEnum.EXTENSION_LEVEL_AD_BLOCKER:
              analyticsData.eventLabel = 'EXTENSION_LEVEL_AD_BLOCKER';
              ga('send', analyticsData);
              break;
            case googlefc.AdBlockerStatusEnum.NETWORK_LEVEL_AD_BLOCKER:
              analyticsData.eventLabel = 'NETWORK_LEVEL_AD_BLOCKER';
              ga('send', analyticsData);
              break;
            case googlefc.AdBlockerStatusEnum.NO_AD_BLOCKER:
              analyticsData.eventLabel = 'NO_AD_BLOCKER';
              ga('send', analyticsData);
              break;
          }
       }});
    </script>